我的数据集如下所示:
Names Sample Init_QC Run_QC
A DN PASS PASS
A DN FAIL PASS
A RN FAIL FAIL
B DN PASS FAIL
B DN PASS PASS
B RN FAIL PASS
C DN PASS FAIL
C DN FAIL FAIL
C RN PASS PASS
我希望通过计算每个类别的出现次数来按“名称”总结事物。结果看起来像这样:
Names DN RN Init_QC$PASS Init_QC$FAIL Run_QC$PASS Run_QC$FAIL
A 2 1 1 2 2 1
B 2 1 2 1 2 1
C 2 1 1 2 1 2
我希望使用 dplyr 中的“table”或“count”但没有成功
谁有简单的方法来做到这一点? 非常感谢
最佳答案
在基础 R 中:
aggregate(.~Names, df, table)
Names Sample.DN Sample.RN Init_QC.FAIL Init_QC.PASS Run_QC.FAIL Run_QC.PASS
1 A 2 1 2 1 1 2
2 B 2 1 1 2 1 2
3 C 2 1 1 2 2 1
要将所有内容放入列中,请执行以下操作:
do.call(data.frame, aggregate(.~Names, df, table))
Names Sample.DN Sample.RN Init_QC.FAIL Init_QC.PASS Run_QC.FAIL Run_QC.PASS
1 A 2 1 2 1 1 2
2 B 2 1 1 2 1 2
3 C 2 1 1 2 2 1
使用reshape2:
reshape2::recast(df, Names~variable+value, fun.agg = length, id.var = 'Names')
Names Sample_DN Sample_RN Init_QC_FAIL Init_QC_PASS Run_QC_FAIL Run_QC_PASS
1 A 2 1 2 1 1 2
2 B 2 1 1 2 1 2
3 C 2 1 1 2 2 1
在 tidyverse 中:
library(tidyverse)
df %>%
pivot_longer(-Names) %>%
count(Names, name, value) %>%
pivot_wider(Names, names_from = c(name, value), values_from = n)
# A tibble: 3 x 7
Names Init_QC_FAIL Init_QC_PASS Run_QC_FAIL Run_QC_PASS Sample_DN Sample_RN
<chr> <int> <int> <int> <int> <int> <int>
1 A 2 1 1 2 2 1
2 B 1 2 1 2 2 1
3 C 1 2 2 1 2 1
关于r - 按组跨多列计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72691810/