簡體   English   中英

在 R 中應用具有三個屬性的函數

[英]Apply function with three attributes in R

我有一個包含三列ABCEFGHIJ 我想創建第四列KLM ,它是 ABC 條件值的函數,以及EFGHIJ的運算結果。

現在我正在使用一個循環,在 400,000 行上需要大約 15 分鍾。 這對我來說似乎不太 R。 必須有一種方法可以顯着減少時間:

for (i in 1:nrow(df)){
  if(is.na(df$ABC[i]) == FALSE ){
    df$KLM[i] <- as.numeric(df$EFG[i] * df$HIJ[i])
  } else {
    df$KLM[i] = NaN
  }
}

我添加了 df:

ABC = c("NaN", 232,234,233,232.5)
EFG = c(12,12,12,12,12)
HIJ = c(10.75, 10.95, 11.25, 10.85, 10.55)
KLM = c(0,0,0,0,0)

df <- as.data.frame(cbind(ABC, EFG, HIJ, KLM))
df < unfactor(df)


> df
    ABC EFG   HIJ KLM
1   NaN  12 10.75   0
2   232  12 10.95   0
3   234  12 11.25   0
4   233  12 10.85   0
5 232.5  12 10.55   0

有誰知道如何簡化並提高效率?

評論中提到的@jogo 的解決方案是 data.frame 的最佳矢量化解決方案。

使用data.table可以優化如下:

dt = as.data.table(df)
dt[,`:=`(KLM=NaN)]
set(x = dt, i =which(!is.na(dt$ABC)),j="KLM",value = as.numeric(EFG * HIJ))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM