我想使用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个小时研究这个。
答案 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?你想要实现什么目标?