我是R的新手并寻求帮助。我理解以下问题相当简单,并寻找类似的问题。没有给出我正在寻找的答案 - 任何帮助都会受到赞赏。
问题:
使用table()
函数为三个变量生成频率表,其数据格式为:
Var1 Var2 Var3
1 0 1 0
2 0 1 0
3 1 1 1
4 0 0 1
其中,0 =“否”,1 =“是”
最终表格采用以下格式,变量和值标记为:
Var3
Yes No
Var1 Yes 1 0
No 1 2
Var2 Yes 1 2
No 1 0
到目前为止我尝试了什么:
使用以下代码,我能够生成一个2变量表,其中包含变量的标签,但不包含值(即No和Yes)。
table(data$Var1, data$Var3, dnn = c("Var1", "Var3"))
看起来像这样:
Var3
Var1 0 1
0 2 1
1 0 1
在尝试标记行和列值时(0 =否和1 =是)我理解row.names
和responseName
可以使用,但是下面标记行名称的尝试给出了{{ 1}}错误。
all arguments must have the same length
我也尝试使用> table(data$Var1, data$Var2, dnn = c("Var1", "Var2"), row.names = c("No", "Yes"))
但是使用下面代码生成的表格形状不正确导致问题的频率不正确。标签行和问题的问题col值仍然存在。
ftable()
使用> ftable(data$Var1, data$Var2, data$Var3, dnn = c("Var1", "Var2", "Var3"))
Var3 0 1
Var1 Var2
0 0 0 1
1 2 0
1 0 0 0
1 0 1
生成所需形状表格的任何帮助都将非常感激。
答案 0 :(得分:5)
您可以在更改标签后tabular
尝试library(tables)
,如@thelatemail所示
library(tables)
data[] <- lapply(data, factor, levels=1:0, labels=c('Yes', 'No'))
tabular(Var1+Var2~Var3, data=data)
# Var3
# Yes No
#Var1 Yes 1 0
# No 1 2
#Var2 Yes 1 2
# No 1 0
data <- structure(list(Var1 = c(0L, 0L, 1L, 0L), Var2 = c(1L, 1L, 1L,
0L), Var3 = c(0L, 0L, 1L, 1L)), .Names = c("Var1", "Var2", "Var3"
), class = "data.frame", row.names = c("1", "2", "3", "4"))
答案 1 :(得分:1)
最简单的方法是使用reshape2
包。首先,您需要将数字信息转换为因子,以便它不会将其视为数字。
data$Var1 <- as.factor(data$Var1)
data$Var2 <- as.factor(data$Var2)
data$Var3 <- as.factor(data$Var3)
然后,您可以轻松应用table(data)
来获取所需信息。如果您真的想以您指定的格式对其进行转换,请将其拉为data.frame
,然后根据需要对其进行转换:
df <- as.data.frame(table(data))
library(reshape2)
dcast(df, Var1+Var2 ~ Var3)
这是输出:
Var1 Var2 0 1
1 0 0 0 1
2 0 1 2 0
3 1 0 0 0
4 1 1 0 1
编辑:您可以在数据框上使用ftable
一切因素:
> ftable(data)
Var3 0 1
Var1 Var2
0 0 0 1
1 2 0
1 0 0 0
1 0 1