gpt4 book ai didi

r - 计算 R (dplyr) 中数据帧中每行字符串值的出现次数

转载 作者:行者123 更新时间:2023-12-02 16:06:03 26 4
gpt4 key购买 nike

我正在计算数据框中每行选择字符串值的出现次数。理想情况下,这将使用 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 中的一个字符串存在于 cols 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

(即如果 bcde 中的字符串在 cols d2:d8 中计算出现的次数,而不是仅仅检查它们的存在)。

我不确定如何在循环遍历数据帧时合并计数函数。

谢谢!

最佳答案

您可以将 acrossrowSums 一起使用 -

library(dplyr)

df %>% mutate(d9 = rowSums(across(all_of(cols), `%in%`, bcde)))

# 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

这也可以用 base R 来写——

df$d9 <- rowSums(sapply(df[cols], `%in%`, bcde))

关于r - 计算 R (dplyr) 中数据帧中每行字符串值的出现次数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69370349/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com