在 R 中添加计算列的更快方法

问题描述 投票:0回答:1

我有一个数据框,我想在其中检查某些条件并需要根据条件结果添加一个新列。

这是我的输入数据

InputData=data.frame(A=c("","","Apple"),B=c("","","Orange"),C=c("","",""),D=c(0,1,1))

这是我想要的输出

OutputData=InputData %>% mutate(R = case_when(A=='' & B=='' & C=='' & D==0 ~ "Yes",TRUE ~ "No"))

我尝试使用 Case 函数进行变异。它工作正常但是当我有更多行数时需要更长的时间。

请帮助我以更快的方式完成它。

r dataframe mutate
1个回答
0
投票

我很惊讶你的代码对于这么小的数据(只有 10 万行)很慢。我会这样做:

InputData$R <- "NO"
InputData[InputData$A == '' & InputData$B == '' &
            InputData$C == '' & InputData$D == 0, "R"] <- "Yes"

但是,我强烈建议使用逻辑值而不是“是”/“否”:

InputData$S <- InputData$A == '' & InputData$B == '' &
  InputData$C == '' & InputData$D == 0
#      A      B C D   R     S
#1                0 Yes  TRUE
#2                1  NO FALSE
#3 Apple Orange   1  NO FALSE

如果仍然太慢,包 data.table 可以提供帮助。但除非数据实际上变大,否则没有必要这样做。

© www.soinside.com 2019 - 2024. All rights reserved.