我需要创建一个'new'列并在指定的列(即'Output'列)上运行COUNTIF函数的等价物。例如,我需要计算这些列是否包含3或4。
右侧所需列的示例数据
x Output.1 Output.2 Output.3 Output.4 Output.5 y new
1 3 3 NA NA NA 2 2
1 4 4 3 3 NA 2 4
1 3 3 3 3 3 2 5
1 2 2 4 4 4 2 3
我尝试过使用rowSums(经过一些搜索后),例如:
df$new <- rowSums(df[c('Output.1', 'Output.2', 'Output.3', 'Output.4', 'Output.5')] == 3)
并使用grep
隔离列
df[, new:= rowSums(.SD, na.rm = TRUE), .SDcols = grep("Output.", names(df))]
虽然后者对值进行求和 - 我需要对实例进行计数,但我无法弄清楚如何在那里使用== 3的条件。
提前致谢
答案 0 :(得分:1)
您可以使用apply
:
df$new <- apply(df[, grep("Output.", names(df))], MARGIN = 1,
function(x) sum(x %in% c(3, 4), na.rm = T))
df
# x Output.1 Output.2 Output.3 Output.4 Output.5 y new
# 1 1 3 3 NA NA NA 2 2
# 2 1 4 4 3 3 NA 2 4
# 3 1 3 3 3 3 3 2 5
# 4 1 2 2 4 4 4 2 3