是否有类似于pandas.crosstab的R函数,使用命名属性生成联合频率表?
我想用单个变量[var1,Y]或[var2,Y]和联合变量[var1,var2,Y]迭代地创建一个频率表 R中的以下代码只能单独制作单频表和联合频表是否有类似于pandas.crosstab的R函数,使用命名属性生成联合频率表?,r,crosstab,R,Crosstab,我想用单个变量[var1,Y]或[var2,Y]和联合变量[var1,var2,Y]迭代地创建一个频率表 R中的以下代码只能单独制作单频表和联合频表 c1 <- ftable(variable[[1]], data1[,3]) # Fund # # b 21 # c 206 # d 1127 c1 <- ftable(variable[[3]], data1[,3]) # x.2 a b c d # x.1
c1 <- ftable(variable[[1]], data1[,3])
# Fund
#
# b 21
# c 206
# d 1127
c1 <- ftable(variable[[3]], data1[,3])
# x.2 a b c d
# x.1
# b 0 9 4 8
# c 0 116 51 39
# d 5 542 291 289
是否有一种方法可以一起生成频率表,但同时保留命名属性?您可以使用
addmargins
将边距(行和列总和)添加到表中
例如:
data(mtcars)
addmargins(table(mtcars[c("cyl", "gear")]))
# gear
# cyl 3 4 5 Sum
# 4 1 8 2 11
# 6 2 4 1 7
# 8 12 0 2 14
# Sum 15 12 5 32
ftable(addmargins(table(mtcars[c("cyl", "gear", "carb")])))
# carb 1 2 3 4 6 8 Sum
# cyl gear
# 4 3 1 0 0 0 0 0 1
# 4 4 4 0 0 0 0 8
# 5 0 2 0 0 0 0 2
# Sum 5 6 0 0 0 0 11
# 6 3 2 0 0 0 0 0 2
# 4 0 0 0 4 0 0 4
# 5 0 0 0 0 1 0 1
# Sum 2 0 0 4 1 0 7
# 8 3 0 4 3 5 0 0 12
# 4 0 0 0 0 0 0 0
# 5 0 0 0 1 0 1 2
# Sum 0 4 3 6 0 1 14
# Sum 3 3 4 3 5 0 0 15
# 4 4 4 0 4 0 0 12
# 5 0 2 0 1 1 1 5
# Sum 7 10 3 10 1 1 32
我首先使用table
创建表,因为addmargins
需要table
的输出,而不是ftable
。对于三维表格,我最后使用ftable
以更可读的格式格式化表格
生成所有可能的表
# Select columns interesting to use in table
dta <- mtcars[c("cyl", "vs", "am", "gear", "carb")]
# Generate all possible combinations of columns
combinations <- unlist(lapply(1:ncol(dta),
function(x) combn(1:ncol(dta), x, simplify = FALSE)), recursive = FALSE)
# For each combination calculate a table
tables <- lapply(combinations, function(cols) ftable(dta[cols]))
#选择要在表中使用的列
dta您可以使用addmargins
将边距(行和列总和)添加到表中
例如:
data(mtcars)
addmargins(table(mtcars[c("cyl", "gear")]))
# gear
# cyl 3 4 5 Sum
# 4 1 8 2 11
# 6 2 4 1 7
# 8 12 0 2 14
# Sum 15 12 5 32
ftable(addmargins(table(mtcars[c("cyl", "gear", "carb")])))
# carb 1 2 3 4 6 8 Sum
# cyl gear
# 4 3 1 0 0 0 0 0 1
# 4 4 4 0 0 0 0 8
# 5 0 2 0 0 0 0 2
# Sum 5 6 0 0 0 0 11
# 6 3 2 0 0 0 0 0 2
# 4 0 0 0 4 0 0 4
# 5 0 0 0 0 1 0 1
# Sum 2 0 0 4 1 0 7
# 8 3 0 4 3 5 0 0 12
# 4 0 0 0 0 0 0 0
# 5 0 0 0 1 0 1 2
# Sum 0 4 3 6 0 1 14
# Sum 3 3 4 3 5 0 0 15
# 4 4 4 0 4 0 0 12
# 5 0 2 0 1 1 1 5
# Sum 7 10 3 10 1 1 32
我首先使用table
创建表,因为addmargins
需要table
的输出,而不是ftable
。对于三维表格,我最后使用ftable
以更可读的格式格式化表格
生成所有可能的表
# Select columns interesting to use in table
dta <- mtcars[c("cyl", "vs", "am", "gear", "carb")]
# Generate all possible combinations of columns
combinations <- unlist(lapply(1:ncol(dta),
function(x) combn(1:ncol(dta), x, simplify = FALSE)), recursive = FALSE)
# For each combination calculate a table
tables <- lapply(combinations, function(cols) ftable(dta[cols]))
#选择要在表中使用的列
dta嘿Lise,你有示例数据吗?您可以使用table()
或整洁的方法是:library(dplyr);计数(数据1,变量)
。嘿,Lise,你有示例数据吗?您可以使用table()
或整洁的方法是:library(dplyr);计数(数据1,变量)
。感谢您的评论。另一个问题是,如果我想在for循环中生成所有可能的联接表,该怎么办?@Lisa Tryunlist(lappy(1:5,函数(x)combn(1:5,x,simplify=FALSE)),recursive=FALSE)
;结果可以在for
循环中使用。@Lisa在回答中添加了一个示例感谢您的评论。另一个问题是,如果我想在for循环中生成所有可能的联接表,该怎么办?@Lisa Tryunlist(lappy(1:5,函数(x)combn(1:5,x,simplify=FALSE)),recursive=FALSE)
;结果可以在for
循环中使用。@Lisa在答案中添加了一个示例