假设我有这个数据集
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”(等)并得到这个结果:
我尝试使用 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/