r - 使用 dplyr 对每一行(按行)中的特定字符串(字符串)进行计数或求和

标签 r string tidyverse dplyr

假设我有这个数据集

ds <- data.frame(X1 = c("TP","TP","FN","FN"),
             X2 = c("TP","TP","FN","FN"),
             X3 = c("TN","TN","FP","FP"),
             X4 = c("FP","TN","FP","FP"))
                 

我想计算每一行中有多少个“TP”“FN”(等)并得到这个结果:
table

我尝试使用 mutate(total_TP= sum(str_detect(select(X1:X4), "TP"))) 但它不起作用。

我想留在 tidyverse 环境中。

谢谢

最佳答案

我会建议下一个方法。您可以计算变量然后合并。您可以使用 dplyr 完成所有这些操作。您还需要使用 pivot_longer()pivot_wider() 格式化数据。这些函数属于 tidyr。调用 tidyverse 时加载以前的包。您可以创建摘要变量,然后加入创建一个公共(public) id 变量。这里的代码:

library(tidyverse)

#Code
ds %>% mutate(id=1:n()) %>%
  left_join(ds %>% mutate(id=1:n()) %>% pivot_longer(cols = -id) %>%
              group_by(id,value) %>% summarise(N=n()) %>%
              pivot_wider(names_from = value,values_from=N)) %>%
  select(-id) %>% replace(is.na(.), 0)

输出:

  X1 X2 X3 X4 TP FP TN FN
1 TP TP TN FP  2  1  1  0
2 TP TP TN TN  2  0  2  0
3 FN FN FP FP  0  2  0  2
4 FN FN FP FP  0  2  0  2

关于r - 使用 dplyr 对每一行(按行)中的特定字符串(字符串)进行计数或求和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63570010/

相关文章:

r - 从日期时间更改为数字并返回到 R 中的日期时间

css - R Markdown : how to change style with internal css?

java - 在字符串列表中搜索

r - 如何同时旋转多个列?

json - 将包含嵌入列表的 JSON 解析为扁平化的 data.frame,忽略不需要的键

c++ - 如何修改函数中的字符串?

c++ - C++11 中没有 "sto{short, unsigned short}"函数?

r - 安装胶水后 tidyverse 的问题

r - 如何从R中其他列命名的列中选择数据

r - 唯一 ID 的列联表