这是我的输入数据框:
df <- data.frame(Col1=c("A", "B", "C", "B", "C", "A", "A", "C"),Col2=c("Blue", "Red", "Blue", "Blue", "Blue", "Red", "Red", "Blue"),Col3=c("Young", "Old", "Old", "Young", "Young", "Young", "Old", "Old"))
df
Col1 Col2 Col3
1 A Blue Young
2 B Red Old
3 C Blue Old
4 B Blue Young
5 C Blue Young
6 A Red Young
7 A Red Old
8 C Blue Old
我正在尝试获取如下列联表:
Blue Red Young Old
A 1 2 2 1
B 1 1 1 1
C 3 0 1 2
我几乎可以使用以下命令,但 Col2 和 Col3 组合在一起:
as.data.frame(table(df)) %>% dcast(Col1 ~ Col2 + Col3, value.var="Freq")
Col1 Blue_Old Blue_Young Red_Old Red_Young
1 A 0 1 1 1
2 B 0 1 1 0
3 C 2 1 0 0
最佳答案
可用于任意数量列的基本 R 选项可以是,
do.call(cbind, lapply(df[-1], function(i) table(df$Col1, i)))
# Blue Red Old Young
#A 1 2 1 2
#B 1 1 1 1
#C 3 0 2 1
关于r - 来自数据框的列联表,保留第一列作为引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55747566/