【问题标题】:Count across columns if value is a certain character in R [duplicate]如果值是R中的某个字符,则跨列计数[重复]
【发布时间】:2020-08-17 17:29:20
【问题描述】:

我想创建一个新列,用于计算选定数量的变量 (X1 - X3) 中出现“是”的次数。这是我的数据框的示例:

df <- data.frame(name = paste0("name", 1:6),
                 X1 = c("yes","no","yes","yes","yes","maybe"),
                 X2 = c("yes","yes","yes","maybe","yes","maybe"),
                 X3 = c("no","yes","yes","maybe","yes","yes"))

我希望我的新专栏如下所示:

count_yes = c(2,2,3,1,3,1)

df2 <- cbind(df,count_yes)

谢谢!!

【问题讨论】:

  • df$count_yes &lt;- rowSums(df[-1] == 'yes')

标签: r


【解决方案1】:

使用dplyrstringr

library(dplyr)
library(stringr)

df <- data.frame(name = paste0("name", 1:6),
                 X1 = c("yes","no","yes","yes","yes","maybe"),
                 X2 = c("yes","yes","yes","maybe","yes","maybe"),
                 X3 = c("no","yes","yes","maybe","yes","yes"))

df <- df %>%
  mutate(count_yes = str_count(X1, "yes") + str_count(X2, "yes") + str_count(X3, "yes"))

有输出:

> df
   name    X1    X2    X3 count_yes
1 name1   yes   yes    no         2
2 name2    no   yes   yes         2
3 name3   yes   yes   yes         3
4 name4   yes maybe maybe         1
5 name5   yes   yes   yes         3
6 name6 maybe maybe   yes         1

更新

df <- df %>%
  mutate(count = across(.cols = contains("X"), .fns = str_count, "yes")) %>%
  rowwise() %>%
  mutate(count_yes = across(.cols = contains("count"), .fns = sum)) %>%
  select(name, X1, X2, X3, count_yes)

【讨论】:

  • 如果数据有100列,则需要输入str_count(X, "yes") + ... 100次。这不是一个好的编程想法。
  • 你也可以在你的问题中澄清这一点,并询问如果有很多列如何处理这个问题。查看更新,
猜你喜欢
  • 2021-12-24
  • 2020-10-29
  • 1970-01-01
  • 2021-08-28
  • 2015-11-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多