【发布时间】:2018-06-24 15:24:37
【问题描述】:
我正在尝试使用 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)
【问题讨论】:
-
请注意
"B" %in% names(.) & "C" %in% names(.) & "D" %in% names(.)是TRUE或FALSE;ifelse最适合用于逻辑值的向量的情况;你到底想用这个语句测试什么? -
请注意,
rowSums(df)提供的正是您想要的combined.score。 -
@MichaelChirico 第一个条件将返回 'TRUE',所以我希望它会计算 'combined.score' = B + C + D。很像 'combined.score.correct' 变量。我已经多次使用 mutate - ifelse 语句来处理数据帧,没有任何问题,为什么这种情况很特别?
-
@MichaelChirico:“你到底想测试什么来验证这个陈述?” ifelse 语句本身就是我在语句中测试的,即如果“B”、“C”和“D”存在,则计算 B + C + D。它不这样做,那为什么不呢?跨度>