【发布时间】:2021-02-10 23:06:47
【问题描述】:
我正在处理一个不整洁的夏令营登记表。表单输出如下:
leaders teen_adventure
1 camp, overnight <NA>
2 <NA> <NA>
3 camp, overnight camp, float, overnight
我想生成新列来汇总每个可能答案的总数。
leaders teen_adventure camps overnights floats
1 camp, overnight <NA> 1 1 0
2 <NA> <NA> 0 0 0
3 camp, overnight camp, float, overnight 2 2 1
我觉得这有一个 dplyr 解决方案,例如:
reprex %>%
mutate(camps = sum(case_when(
str_detect(select(., everything()), "camp") ~ 1,
TRUE ~ 0
)))
或者也许使用cross()。
这里是样本数据集:
# data
reprex <- structure(list(leaders = c("camp, overnight", NA, "camp, overnight"),
teen_adventure = c(NA, NA, "camp, float, overnight")),
row.names = c(NA, -3L), class = "data.frame")
【问题讨论】:
-
也许可以尝试使用
pivot_longer()进行堆叠,然后这样的事情可能会有所帮助:stackoverflow.com/questions/58674656/… -
除了camp、float、night,还有没有可能有更多的专栏?
-
@Dayne 实际上还有另一列用于善后护理,而不是在此代表中。如果您的问题是是否有更多包含实际数据的名义列,那么也可以。