gpt4 book ai didi

r - 如何获取R中完整数据框所有列的频率表?

转载 作者:行者123 更新时间:2023-12-03 15:30:20 25 4
gpt4 key购买 nike

我想从数据框中创建一个频率表并将其保存在 excel 中。使用 table()函数 i 只能创建特定列的频率。但是我想为所有列创建频率表,并且对于每一列,变量的级别或类型也可能不同。就像对数据框的一种总结,但不会有均值或其他度量,只有频率。
我正在尝试这样的事情

 for(i in 1:230){
rm(tb)
tb<-data.frame(table(mydata[i]))
tb2<-cbind(tb2,tb)
}

但它显示以下错误

Error in data.frame(..., check.names = FALSE) : arguments imply differing number of rows: 15, 12



代替 cbind()我也用过 data.frame()但错误没有改变。

最佳答案

也许 rbind 解决方案更好,因为它允许您处理不同级别的变量:

dt = data.frame(x = c("A","A","B","C"),
y = c(1,1,2,1))

dt

# x y
# 1 A 1
# 2 A 1
# 3 B 2
# 4 C 1

dt_res = data.frame()

for (i in 1:ncol(dt)){

dt_temp = data.frame(t(table(dt[,i])))
dt_temp$Var1 = names(dt)[i]

dt_res = rbind(dt_res, dt_temp)

}

names(dt_res) = c("Variable","Levels","Freq")

dt_res

# Variable Levels Freq
# 1 x A 2
# 2 x B 1
# 3 x C 1
# 4 y 1 3
# 5 y 2 1

还有一个使用 apply 的替代(可能更快)过程:
dt = data.frame(x = c("A","A","B","C"),
y = c(1,1,2,1))

dt

ff = function(x){

y = data.frame(t(table(x)))
y$Var1 = NULL
names(y) = c("Levels","Freq")
return(y)
}

dd = do.call(rbind, apply(dt, 2, ff))

dd

# Levels Freq
# x.1 A 2
# x.2 B 1
# x.3 C 1
# y.1 1 3
# y.2 2 1


# extract variable names from row names
dd$Variable = sapply(row.names(dd), function(x) unlist(strsplit(x,"[.]"))[1])

dd

# Levels Freq Variable
# x.1 A 2 x
# x.2 B 1 x
# x.3 C 1 x
# y.1 1 3 y
# y.2 2 1 y

关于r - 如何获取R中完整数据框所有列的频率表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32220202/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com