【发布时间】:2021-09-29 04:17:36
【问题描述】:
我希望计算数据框中每行选择字符串值的出现次数。理想情况下,这将使用dplyr 包完成。
这是一个类似于我正在使用的数据框:
df <- tibble(
d1 = c('b', 'a', 'a', 'a', 'a', 'a', 'a', 'a'),
d2 = c('a', 'a', 'b', 'a', 'a', 'a', 'a', 'a'),
d3 = c('a', 'a', 'a', 'c', 'a', 'b', 'a', 'a'),
d4 = c('a', 'a', 'a', 'a', 'a', 'a', 'a', 'd'),
d5 = c('a', 'c', 'a', 'a', 'a', 'a', 'a', 'a'),
d6 = c('a', 'a', 'a', 'b', 'a', 'a', 'd', 'a'),
d7 = c('a', 'a', 'a', 'a', 'a', 'a', 'a', 'a'),
d8 = c('a', 'a', 'a', 'a', 'a', 'a', 'a', 'a')
)
我希望能够定义我正在计算的列:
cols <- c('d2', 'd3', 'd4', 'd5', 'd6', 'd7', 'd8')
我还想定义我要搜索的字符串:
bcde <- c('b', 'c', 'd', 'e')
到目前为止,我已经能够使用以下代码确定bcde 中的一个字符串存在于每行d2:d8 之一中:
df <- df %>%
mutate(
d9 = case_when(
if_any(all_of(cols), ~ . %in% bcde) ~ 1,
TRUE ~ 0)
)
产生:
d1 d2 d3 d4 d5 d6 d7 d8 d9
<chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <dbl>
1 b a a a a a a a 0
2 a a a a c a a a 1
3 a b a a a a a a 1
4 a a c a a b a a 1
5 a a a a a a a a 0
6 a a b a a a a a 1
7 a a a a a d a a 1
8 a a a d a a a a 1
但是,我想制作:
d1 d2 d3 d4 d5 d6 d7 d8 d9
<chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <dbl>
1 b a a a a a a a 0
2 a a a a c a a a 1
3 a b a a a a a a 1
4 a a c a a b a a 2
5 a a a a a a a a 0
6 a a b a a a a a 1
7 a a a a a d a a 1
8 a a a d a a a a 1
(即,如果在 cols d2:d8 中出现 bcde 中的字符串,则计算出现次数,而不是仅仅检查它们是否存在)。
我不确定如何在循环遍历数据帧时加入计数功能。
谢谢!
【问题讨论】: