计算R中数据帧的比例并将数据帧转换为表

时间:2016-07-28 22:26:59

标签: r dataframe

我想使用prop.table()函数来查找数据框中的比例。要使用prop.table()函数,对象必须是表。所以,这就是我的所作所为:

kids<-c("Jack","Jill")
ages<-c(25,66)
test<-c(0.1,0.3)
d<-data.frame(kids, ages,test, stringsAsFactors = FALSE)

我做了一次完整性检查,以确保我的数据框没问题:

sapply(d,class)

给了我

#     kids        ages        test 
# "character"   "numeric"   "numeric" 
class(d)
# [1] "data.frame"

现在将 d 转换为表格,我用谷歌搜索,发现一种方法是将数据帧转换为矩阵然后转换为表格。

所以,这就是我的所作所为:

dtable<-(as.table(as.matrix(d)))
sapply(dtable,mode)
       Jack        Jill          25          66         0.1         0.3 
"character" "character" "character" "character" "character" "character" 

问题#1:我不太确定为什么函数会将所有数字转换为字符? 我问这个是因为这是我用Google搜索时发现的:

melvin <- data.frame(x=c(3,1,3,2),y=c(3,3,4,5))
clyde   <- as.table(as.matrix(melvin))
prop.table(clyde,1)

此代码效果很好。这是确认:

sapply(clyde,mode)
[1] "numeric" "numeric" "numeric" "numeric" "numeric" "numeric" "numeric" "numeric"
prop.table(clyde,1)
          x         y
A 0.5000000 0.5000000
B 0.2500000 0.7500000
C 0.4285714 0.5714286
D 0.2857143 0.7142857

我有点困惑为什么会发生这种情况。为什么我的代码不起作用?

问题2:如果有任何快捷方式可以执行此操作。我很感激你的帮助。

我是初学者所以,如果这听起来太基本,我很抱歉。但是,我相信我花了大约7个小时研究这个。

1 个答案:

答案 0 :(得分:0)

对问题1的回应 阅读?as.matrix

你会注意到,它说:

  

as.matrix的默认方法是调用as.vector(x),因此例如   强迫角色向量的因素。

由于您使用混合变量创建了data.frame,并且还使用了该选项 stringsAsFactors = FALSE,您拥有带字符的data.frame。

改为

kids<-c("Jack","Jill")
ages<-c(25,66)
test<-c(0.1,0.3)
d<-data.frame(kids, ages,test, stringsAsFactors = T)

然后

as.table(as.matrix(d))
#exclude the first   character/factor column
d_ForProp.table <- as.table(as.matrix(d[,-1]))
d.prop.table <-prop.table(d_ForProp.table)
rownames(d.prop.table) <-d$kids #assign rownames to match kids

最后,为什么你想要prop.table?你想要实现什么目标?