簡體   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