我的零值很重要,case_when 正在删除它们

My zero values matter and case_when is removing them

我有一个 2X2 设计(它更复杂,但下面有一个简单的例子来说明我的问题)。

假设我的输出数据是这样的:

图中ID是每个参与者,块号是他们看到的情况,每个人看到4个问题。

平衡发挥作用的地方(例如)是同一项目(例如,项目 1)在 Q1-Q4 之间的不同位置重复,具体取决于区块。在上图中,Item1 将是红色数字。我使用 case_when 提取组合并给我一个干净的 Item1 响应列:

data <- data %>% mutate(
  Item1= case_when(
    BlockNumber == 'Block1' & Q1 ~ Q1, 
    BlockNumber == 'Block5' & Q2 ~ Q2,
    BlockNumber == 'Block6' & Q3 ~ Q3,
    BlockNumber == 'Block7' & Q4 ~ Q4))

这给了我类似的东西:


代码完全按照我的需要执行,但零值正在下降 [图中突出显示]。

它不是零,只是一个 NA 值。是这样的: enter image description here

问题是零在我的数据中是有意义的,我需要保留它们。

有谁知道我可以使用什么代码 add/use 来避免这种情况?之后它真的搞砸了我的平均分数,因为零被删除了。

data <- data %>% mutate(
  Item1= case_when(
    BlockNumber == 'Block1' & Q1 ~ Q1, 
    BlockNumber == 'Block4' & Q2 ~ Q2,
    BlockNumber == 'Block6' & Q3 ~ Q3,
    BlockNumber == 'Block7' & Q4 ~ Q4,

    # Get ready for some magic!
    TRUE ~ 0))

如果您想在其他测试未通过时指定一个值,您可以使用 TRUE 作为最后一个“测试”以使用该值。

否则,任何未通过先前测试的案例都将输出 NA。

我相信您遇到这种情况的原因是整数 0 的计算结果为 FALSE。也就是说,在 BlockNumber == 'Block5' 所在的行中,您有 Q2 == 0,这意味着您要问 BlockNumber == 'Block5' & FALSE 的情况,即 FALSE。因此,对于这种情况,您会得到 NA。

根据你的解释,在我看来你实际上并不需要第二个条件,所以你可以做的是简化你的 case_when 操作:

data %>% mutate(
  Item1= case_when(
    BlockNumber == 'Block1' ~ Q1, 
    BlockNumber == 'Block5' ~ Q2,
    BlockNumber == 'Block6' ~ Q3,
    BlockNumber == 'Block7' ~ Q4))

至少我不明白您为什么需要 & Qx 条件。但如果我误解了什么,请告诉我。