我希望能够使用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
我需要在遍历数据框时,将一个字符串在列d2:d8
中出现的次数计算出来,而不是仅仅检查其是否存在(即在bcde
中计算字符串出现的次数)。
我不确定如何同时使用循环和计数函数来实现这个功能。
谢谢!