我不知道如何或从哪里开始,但我希望有人可以提供帮助。这是我第一次使用R,因此即使在其中查找关键字或推荐内容也会很有帮助。
我的数据框如下:
set.seed(1)
df <- data.frame(
X = sample(c(1, 2, 3), 50, replace = TRUE),
Y = sample(c(1, 2, 3), 50, replace = TRUE))
我想得到一个这样的交叉表:
使用
length(which(df$X == & df$Y == ))
我可以用R计算数据并将其填写到我的Excel工作表中,但必须有一个更好的选择。 预先谢谢你。
答案 0 :(得分:3)
尝试此base R
解决方案:
#Data
set.seed(1)
df <- data.frame(
X = sample(c(1, 2, 3), 50, replace = TRUE),
Y = sample(c(1, 2, 3), 50, replace = TRUE))
#Code
addmargins(table(df$X,df$Y))
输出:
1 2 3 Sum
1 6 7 5 18
2 4 6 9 19
3 5 5 3 13
Sum 15 18 17 50
您还可以像这样更改变量的顺序:
#Code2
addmargins(table(df$Y,df$X))
输出:
1 2 3 Sum
1 6 4 5 15
2 7 6 5 18
3 5 9 3 17
Sum 18 19 13 50
要导出到MS Excel,请使用以下代码:
library(xlsx)
#Transform to dataframe
d1 <- as.data.frame.matrix(addmargins(table(df$X,df$Y)))
#Export
write.xlsx(d1,file='myexample.xlsx','Sheet1')
答案 1 :(得分:1)
如果数据只有两列,只需将data.frame
对象传递到table
。
addmargins(table(df))
如果数据包含多于两列,则可以在传递给table()
之前对它的变量进行子集化。
addmargins(table(df[c("X", "Y")]))
您还可以将formula
传递给xtabs()
。
addmargins(xtabs( ~ X + Y, df))
以上所有给予
Y
X 1 2 3 Sum
1 5 6 3 14
2 2 6 6 14
3 13 4 5 22
Sum 20 16 14 50
要将表格导出到excel文件,可以使用write.xlsx()
中的openxlsx
。
library(openxlsx)
tab <- addmargins(xtabs( ~ X + Y, df))
write.xlsx(tab, "foo.xlsx")