繁体   English   中英

与 R 中的 If 结合使用的更快循环替代方案

[英]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 列名是abc ,也许您可以尝试下面的代码

within(T12, new <- rowSums(cbind(a,b,c),na.rm = TRUE))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM