小编Mar*_*ler的帖子

检查2个R程序是否相同

最近我了解到我可以使用identicalall.equal检查2个数据集是否相同.

我还可以用它们来检查2个R程序是否相同吗?有比下面更好或更合适的方式吗?

program.1 <- readLines("c:/r stuff/test program 1.r")
program.2 <- readLines("c:/r stuff/test program 2.r")

identical(program.1, program.2)
all.equal(program.1, program.2)
isTRUE(all.equal(program.1, program.2))
Run Code Online (Sandbox Code Playgroud)

感谢您的任何想法或建议.

以下是比较的2个测试程序的内容:

a <- matrix(2, nrow=3, ncol=4)

b <- c(1,2,3,4,5,6,7,8,6,5,4,3,2)

table(b)

c <- runif(2,0,1)

a * b
Run Code Online (Sandbox Code Playgroud)

#2012年3月编辑从这里开始#

下面是一个小例子程序使下述收益约什的功能FALSE,而identicalall.equal回报TRUE.我将两个程序文件命名为'testa.r'和'testb.r'.

set.seed(123)

y <- rep(NA, 10)

s <- matrix(ceiling(runif(10,0,100)), nrow=10, byrow=T)

a   <- 25
ab  <- 50
abc <- 75

for(i in 1:10) {
     if(s[i] >  a  & s[i] <= …
Run Code Online (Sandbox Code Playgroud)

r

5
推荐指数
2
解决办法
864
查看次数

R:从字符串中删除最后三个点

我有一个我可能会阅读的文本数据文件readLines.每个字符串的初始部分包含大量的乱码,然后是我需要的数据.乱码和数据通常由三个点分隔.我想在最后三个点之后拆分字符串,或者用某种标记替换最后三个点,告诉R将这三个点左边的所有内容都当作一列.

这是Stackoverflow上的一个类似帖子,它将找到最后一个点:

R:找到字符串中的最后一个点

但是,在我的情况下,一些数据有小数,所以找到最后一个点是不够的.另外,我认为...R中有一个特殊的含义,这可能会使问题复杂化.另一个潜在的复杂因素是一些点比其他点大.此外,在某些行中,三个点中的一个用逗号替换.

除了gregexpr在上面的帖子我尝试过使用gsub,但无法弄清楚解决方案.

这是一个示例数据集和我希望实现的结果:

aa = matrix(c(
'first string of junk... 0.2 0 1', 
'next string ........2 0 2', 
'%%%... ! 1959 ...  0 3 3',
'year .. 2 .,.  7 6 5',
'this_string   is . not fine .•. 4 2 3'), 
nrow=5, byrow=TRUE,
dimnames = list(NULL, c("C1")))

aa <- as.data.frame(aa, stringsAsFactors=F)
aa

# desired result
#                             C1  C2 C3 C4
# 1        first string of junk  0.2  0  1 …
Run Code Online (Sandbox Code Playgroud)

regex r

5
推荐指数
1
解决办法
2314
查看次数

R:write.table的格式输出

是否可以使用write.table格式化输出?

我可以使用tab来左对齐列sep = '\t',并且可以使用两个选项卡增加列之间的间距sep = '\t\t'.

理想情况下,我希望能够右对齐列并使用中间数量的间距,而不是'\ t'和'\ t\t'提供的间距.使用类似的东西会sep = '\t '破坏列对齐.

我必须证明从使用多种不同表格格式的许多不同文件中提取的大量数据.将R的输出文本文件的列间距与原始pdf文档中的列间距紧密匹配将大大提高校对的速度和准确性.

# example data to write to text file

aa = matrix(c(1000,110,10,1, 
              0,2000,20,2, 
              30,300,3000,30000), nrow=3, byrow=TRUE,
         dimnames = list(NULL, c("C1", "C2", "C3","C4")))
aa

# left align columns using a tab

write.table(aa,file="c:/users/mark w miller/simple r programs/formatted_tablea.txt", na = 'NA', sep = '\t',
row.names = F, col.names = F)

#   1000    110 10  1
#   0   2000    20  2
#   30  300 3000    30000 …
Run Code Online (Sandbox Code Playgroud)

r

5
推荐指数
1
解决办法
2万
查看次数

将计数数据框转换为 R 中的比例

我有一个按区域随时间变化的计数数据框。数据框的一行包含每列的计数总计。我想通过将每个列单元格除以相应列的计数总计,将数据框从计数转换为比例。有些列包含缺失的观察结果。我在下面使用嵌套完成了此操作for-loops,但怀疑可能有更简单的方法,也许使用lapply. 我在提取计数总计行时也遇到了麻烦。

我发布此内容的部分原因是,现在是我学习使用 apply 函数系列的时候了,我怀疑它们在这里可能有用,部分原因是我在创建计数总数向量时遇到了很多麻烦,并且怀疑使用它们会有所[[帮助。感谢您提供有关更有效地编写上述代码的任何建议。

my.data = read.table(text = "
state    y1970  y1980  y1990  y2000
Alaska       4      6     NA      7
Iowa        10     20     30     40
Nevada     100    100    100    100
Ohio        50     60     NA     80
total      172    195    215    238
Wyoming      8      9     10     11
", sep = "", header = TRUE)

desired.result = read.table(text = "
state         y1970       y1980       y1990       y2000
Alaska   0.02325581  0.03076923          NA  0.02941176  
Iowa     0.05813953  0.10256410  0.13953488  0.16806723  
Nevada   0.58139535 …
Run Code Online (Sandbox Code Playgroud)

r

5
推荐指数
1
解决办法
1万
查看次数

将4维数组转换为R中的2维数据集

我想将一个4维数组转换成一个二维数据集.我提出了两种方法的代码:一种方法使用暴力方法涉及cbindrbind第二种方法使用嵌套for-loops.不过,我认为可能有更好的方法.谢谢你的任何建议.

R <- 3    # regions
M <- 5    # sites
J <- 2    # samples
T <- 4    # years

# 4-dim example array

y <- array(NA, dim = c(M, J, T, R))

# region 1
y[,1,1,1] =  1; y[,2,1,1] =  2; 
y[,1,2,1] =  3; y[,2,2,1] =  4; 
y[,1,3,1] =  5; y[,2,3,1] =  6;
y[,1,4,1] =  7; y[,2,4,1] =  8;

# region 2
y[,1,1,2] =  9; y[,2,1,2] = 10; 
y[,1,2,2] = 11; y[,2,2,2] …
Run Code Online (Sandbox Code Playgroud)

r

5
推荐指数
1
解决办法
1187
查看次数

定期拆分字符串

我想定期拆分一个字符串.我的问题几乎与这个问题相同:如何将字符串拆分为给定长度的子字符串?除了我在数据集中有一列字符串而不是一个字符串.

这是一个示例数据集:

df = read.table(text = "
my.id   X1    
010101   1
010102   1
010103   1
010104   1
020101   1
020112   1
021701   0
021802   0
133301   0
133302   0  
241114   0
241215   0
", header = TRUE, colClasses=c('character', 'numeric'), stringsAsFactors = FALSE)
Run Code Online (Sandbox Code Playgroud)

这是期望的结果.我更愿意删除前导零,如图所示:

desired.result = read.table(text = "
A1 A2 A3   X1
 1  1  1   1
 1  1  2   1
 1  1  3   1
 1  1  4   1
 2  1  1   1
 2  1 12   1
 2 17 …
Run Code Online (Sandbox Code Playgroud)

string r

5
推荐指数
1
解决办法
719
查看次数

保护特定单词,删除字符串中的字母

我想删除字符串中的字母,但保护特定的单词.这是一个例子:

my.string <- "Water the 12 gold marigolds please, but not the 45 trees!"

desired.result <- "12 marigolds, 45 trees"
Run Code Online (Sandbox Code Playgroud)

我尝试了下面的代码,结果令人惊讶.我认为()会保护它所包含的一切.相反,恰恰相反.只()删除了内部的单词(加上!).

gsub("(marigolds|trees)\\D", "", my.string)

# [1] "Water the 12 gold please, but not the 45 "
Run Code Online (Sandbox Code Playgroud)

以下是一个较长字符串的示例:

my.string <- "Water the 12 gold marigolds please, but not the 45 trees!, The 7 orange marigolds are fine."

desired.result <- "12 marigolds, 45 trees, 7 marigolds"

gsub("(marigolds|trees)\\D", "", my.string)
Run Code Online (Sandbox Code Playgroud)

返回:

[1] "Water the 12 gold please, …
Run Code Online (Sandbox Code Playgroud)

regex string r

5
推荐指数
2
解决办法
95
查看次数

比较R中的两个向量

我有两个向量a = c(1,2,3),b = c(1,2,3)

我想测试是否a完全相同b.我知道结果可以给出sum(a == b) == length(a),但有没有优雅的方式?

r

5
推荐指数
1
解决办法
2427
查看次数

Cygwin安装注意事项:将安装交给提升的子进程

我正在尝试安装Cygwin作为gcc 6.3.0Windows 1064 位机器上安装的前兆。我正在按照我在此处找到的说明进行操作。

当我使用以下行安装Cygwin软件包时(上述链接中的第 2 步):

C:\cygwin64>setup-x86_64.exe -q -P wget -P gcc-g++ -P make -P diffutils -P libmpfr-devel -P libgmp-devel -P libmpc-devel
Run Code Online (Sandbox Code Playgroud)

我在 Windows 命令窗口中收到以下消息:

C:\cygwin64>note: Hand installation over to elevated child process.
_
Run Code Online (Sandbox Code Playgroud)

如上图所示,光标位于Cin下方C:\cygwin64并闪烁。就这样保持了大约一个小时。

这是否仅仅意味着计算机需要很长时间来安装Cygwin软件包。或者这是否意味着Cygwin安装失败,我需要尝试其他方法?还是计算机正在等待我从键盘在 Windows 命令窗口中输入内容?如果是第三种可能性,我应该输入什么?

上面链接中的说明似乎非常详尽,但没有提及此消息。我也无法通过搜索互联网找到任何建议。说明还建议安装可能只需 15 分钟。所以,等了一个小时后,我想有什么问题。

谢谢你的任何建议。

附注。

我确实在这里找到了一条消息。

这种似乎表明Cygwin安装成功:

if the elevation was successful.  In that case the stdout log now …
Run Code Online (Sandbox Code Playgroud)

c c++ windows gcc cygwin

5
推荐指数
1
解决办法
2074
查看次数

使用 R 将一个向量中的元素在另一向量中的位置

我希望创建一个从一个到另一个vector的职位。这类似于以下问题:elementsvectorvector

获取一个向量在另一个向量中的值的索引?

是否有 R 函数用于查找向量中元素的索引?

matchbase 中的函数在R最简单的情况下工作,如下所示:

a <- c(1,1,2,2,3,3,4,4,5,5)
b <- c(1,2,3,4,5)
desired.output <- c(1,3,5,7,9)
match(b,a)
#[1] 1 3 5 7 9
Run Code Online (Sandbox Code Playgroud)

但是,match在如下所示的更复杂的情况下似乎不起作用。which我可能需要和的组合match。到目前为止,在我考虑的每种情况下, 中的值b出现的频率并不b比 中出现的频率高a。我需要一个基本R解决方案。

a <- c(1,1,2,2,3,3,4,4,5,5)
b <- c(1,2,2,3,4,5)
desired.output <- c(1,3,4,5,7,9)

a <- c(1,1,2,2,3,3,4,4,5,5)
b <- c(1,2,2,3,4,4,5)
desired.output <- c(1,3,4,5,7,8,9)

a <- c(1,1,2,2,3,3,4,4,5,5)
b <- c(1,2,2,3,4,4,5,5)
desired.output <- c(1,3,4,5,7,8,9,10)

a <- c(1,1,2,2,3,3,4,4,5,5)
b <- …
Run Code Online (Sandbox Code Playgroud)

r

5
推荐指数
1
解决办法
1550
查看次数

标签 统计

r ×9

regex ×2

string ×2

c ×1

c++ ×1

cygwin ×1

gcc ×1

windows ×1