【发布时间】:2018-02-28 01:36:57
【问题描述】:
好的,所以我的数据框看起来像这样让我们调用 if df
KEY A1 A2 A3 A4 B1 B2 B3 B4 C1 C2 C3 C4
1 120 100 NA 110 1 1 NA 1 NA NA NA NA
2 100 NA 115 NA NA NA NA NA Y N Y N
所以我想要做的是,当 A 列的值为 100 并且相应的 B 或 C 列的值分别为 1 或“Y”时,会生成一个带有 X 的新列值为 1。在第 1 行中为 A2 和 B2,在行中为 A1 和 C1。
我尝试做三组收集,然后使用 case_when 使用 mutate 函数。像这样
df<- df %>%
gather(key="A",value="code",dx)%>%
gather(key="B",value="number",dxadm)%>%
gather(key="C",value="character",dxpoa) %>%
mutate(X=case_when(
code == 100 & present >0 ~ 1,
code ==100 & character == "Y"~1)
)
除了这些行的扩展函数返回所有行和我的 X 不合适的位置。
或者,我考虑过类似的东西
df <- df %>%
mutate(X=case_when(
A1 == 100 & B1 >0 ~ 1,
A1 ==100 & C1 == "Y"~1,
A2 == 100 & B2 >0 ~ 1,
A2 ==100 & C2 == "Y"~1,)
以此类推,适用于所有排列。这样做的两个问题是我有很多列,我想为多个不同的 A 值这样做。
谁能推荐一种替代方案或至少一种方法,将第二种解决方案变成只需要一段烦人的长代码,我可以将其变成更通用的函数吗?谢谢!
【问题讨论】:
-
另外,顺便说一句,我曾经被告知(实际上只是最近)不建议在数据框中使用诸如“df”之类的函数名称