[英]Faster Alternative for looping in combination with If in R
我有一个包含 2,000,000 + 行和 22 列的数据框。 在三列中,条目是 0、1 或 NA。 我想要一列,每一行都有这三列的总和,将 NA 视为 0。使用 for 循环肯定太慢了。
你有我的替代品吗? 另一个想法是在 pipe 中使用 mutate,但我在选择要按名称相加的列时遇到问题。
第一次尝试:
for(i in 1:nrow(T12)){
if(is.na(T12$blue[i]) & is.na(T12$blue.y[i])) {
T12$blue[i] <- T12$blue.x[i]
}else if(is.na(T12$blue[i]) & is.na(T12$blue.x[i])){
T12$blue[i] <- T12$blue.y[i]
}else if(is.na(T12$blue[i]) & is.na(T12$blue.x[i]) & is.na(T12$blue.y[i]) )
T12[i,] <- NULL
}
谢谢!
我将假设您要添加的列是前三列。 如果您需要不同的列,只需在下面的代码中更改c(1,2,3)
。
apply(T12[,c(1,2,3)], 1, sum, na.rm=TRUE)
注意:@27φ9 评论说更快的解决方案是
rowSums(T12[,c(1,2,3)], 1, na.rm=TRUE)
您可以先将所有 NA 替换为 0。
df[is.na(df)] <- 0
setDT(df)[,newcol := a + b + c]
如果您的 object 列名是a
, b
和c
,也许您可以尝试下面的代码
within(T12, new <- rowSums(cbind(a,b,c),na.rm = TRUE))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.