我想根据数据表中的列(路径)想出多个列。我的数据集目前有6百万行。R:在同一列上进行行操作以生成N个列
编辑:包括最小数据集,则天真
set.seed(24);
DATA <- data.frame(path=paste0(sample(LETTERS[1:3], 25, replace=TRUE),">",sample(LETTERS[1:3], 25, replace=TRUE)), value=rnorm(25))
下面是我目前使用的代码(当然我不是grepl'ing字母):
for (i in 1:nrow(DATA)) {
if(grepl("A", DATA$path[i])){DATA$A[i]=1}else{DATA$A[i]=0}
if(grepl("B", DATA$path[i])){DATA$B[i]=1}else{DATA$B[i]=0}
if(grepl("C", DATA$path[i])){DATA$C[i]=1}else{DATA$C[i]=0}
}
我使用的旧版本的代码是:
DATA$A <- sapply(DATA$path, function(x) { if(grepl("A", x)){1}else{0}})
DATA$B <- sapply(DATA$path, function(x) { if(grepl("B", x)){1}else{0}})
为我想要输出的每一列。
但这是非常低效的,因为它提供了太多次。
我的问题是:有没有更有效的方法来做同样的事情?或者我坚持第一个代码块?
提前致谢!
多少列,你必须输入?超过4/5? –
@ColonelBeauvel是的,我需要超过4/5列,可能10或更多,具体取决于路径内容。 – iukie
@akrun我已经添加了基于你的例子的示例数据,我认为这个问题略微澄清。 – iukie