我正在尝试使用 dplyr 中的 mutate 创建条件变量,但这似乎对我不起作用。请参阅我尝试创建的示例数据框和组合得分变量。请注意,新变量“combined.score”的第三个观测值不是 B、C 和 D 的总和。看来仅计算第一个观测值,并且该值用于每个行观测值。
我在这里缺少什么?想要一个发生这种情况的原因(没有太多替代代码或解决方案)
df <-
data.frame(B=c(1,0,0),
C=c(3,4,9),
D=c(1,1,0))
#A function to calculate stations whether there is a communication or process component or both
df <- df %>%
mutate(combined.score = ifelse("B" %in% names(.) & "C" %in% names(.) & "D" %in% names(.), B + C + D,
ifelse("B" %in% names(.) & "C" %in% names(.), B + C,
B))) %>%
mutate(combined.score.correct = B + C + D)
Run Code Online (Sandbox Code Playgroud)
的文档ifelse说:
ifelse 返回与test 形状相同的值
这里test是"B" %in% names(df) & "C" %in% names(df) & "D" %in% names(df),它返回一个 1 元素向量
[1] TRUE
Run Code Online (Sandbox Code Playgroud)
因此,该ifelse调用返回一个仅包含 的第一个元素的 1 元素向量B + C + D,然后在整个向量中循环使用该元素。