我的零值很重要,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
条件。但如果我误解了什么,请告诉我。
我有一个 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
条件。但如果我误解了什么,请告诉我。