首先,这是一个非常基本的问题,我不确定如何用语。如果问题是重复的(尽管我使用我认为可能适当的措辞来检查),我显然会收回并欣赏链接。
其次,我确定有一种更简单的方式来做我想尝试的事情,但不想偏离轨道。
行。我试图从0/1的矩阵中得到一个列比例表(1的比例以另一个变量的值为条件,在这种情况下是PARTY)。
我的data.frame是m103,尺寸(437,91)和以下过程有效(如同,产生我想要的):
prop.table(as.matrix(ddply(m103, .(PARTY), sum, na.rm=T)))
但是,当然,我想实际保留输出,这就是出现错误的地方。如果我这样做:
a <- prop.table(as.matrix(ddply(m103, .(PARTY), sum, na.rm=T)))
事情很棒。但是在此之后立刻,如果我尝试:
m103.avg.prop <- prop.table(as.matrix(ddply(m103, .(PARTY), sum, na.rm=T)))
我收到错误:
Error in FUN(X[[2L]], ...) : only defined on a data frame with all numeric variables
我希望在我的代码中保留一个合理的命名方案(第二个例子会继续),但我无法判断这是否与我尝试的内容有关分配输出,或其他东西。
非常感谢!
编辑:让我们看看我是否可以更明确
#Data import
m103 <- read.csv("103_members_party.csv", header=T)
#See the first few rows/columns
m103[1:5,1:5]
#Produces this:
ID PARTY X930 X461 X137
1 15245 100 0 0 0
2 15000 100 0 0 0
3 29108 200 0 0 0
4 15001 100 0 0 0
5 29132 100 0 0 0
#Sum and get col percentages by PARTY (sums the 1's when PARTY==100, PARTY==200, etc)
#WITHOUT assigning to anything
prop.table(as.matrix(ddply(m103, .(PARTY), sum, na.rm=T)))
#Produces:
PARTY V1
[1,] 1.122515e-05 0.580000465
[2,] 2.245030e-05 0.416619418
[3,] 3.681849e-05 0.003309623
#With assignment to a
a <- prop.table(as.matrix(ddply(m103, .(PARTY), sum, na.rm=T)))
a
#Produces
PARTY V1
[1,] 1.122515e-05 0.580000465
[2,] 2.245030e-05 0.416619418
[3,] 3.681849e-05 0.003309623
#Now, assignment to m103.avg.prop
m103.avg.prop <- prop.table(as.matrix(ddply(m103, .(PARTY), sum, na.rm=T)))
#results in error:
Error in FUN(X[[2L]], ...) :
only defined on a data frame with all numeric variables
答案 0 :(得分:2)
你得到的错误是因为你试图总结一些不是数字的东西。没有可重现的代码,我无法准确地告诉你发生了什么。但是,我们要求一个可重复的例子的原因之一是,在制作一个例子的过程中,你经常会发现自己的问题。
在这种情况下,我假设数据来自某个地方,比如excel,因为对数据做出令人惊讶的事情而臭名昭着。尝试查看str(m103)
,其中一列将是字符向量而不是数字。错误的,我必须看到你的数据。
但是,您对a
的分配与m103.avg.prop
的分配之间应该没有区别。作为旁注,我希望尽可能避免使用变量名中的数字,以避免让自己感到困惑!
编辑:添加可运行的代码:
> m103<-data.frame(ID=c(15245, 15000, 29108, 15001, 29132),PARTY=c(100, 100, 200, 100, 100),X930=c(0, 0, 1, 0, 0),X461=c(0, 0, 0, 1, 1),X137=c(1, 1, 1, 1, 1))
> m103
ID PARTY X930 X461 X137
1 15245 100 0 0 1
2 15000 100 0 0 1
3 29108 200 1 0 1
4 15001 100 0 1 1
5 29132 100 0 1 1
> prop.table(as.matrix(ddply(m103, .(PARTY), sum, na.rm=T)))
PARTY V1
[1,] 0.0009579095 0.7163630
[2,] 0.0019158189 0.2807633
> a <- prop.table(as.matrix(ddply(m103, .(PARTY), sum, na.rm=T)))
> m103.avg.prop <- prop.table(as.matrix(ddply(m103, .(PARTY), sum, na.rm=T)))
> a
PARTY V1
[1,] 0.0009579095 0.7163630
[2,] 0.0019158189 0.2807633
> m103.avg.prop
PARTY V1
[1,] 0.0009579095 0.7163630
[2,] 0.0019158189 0.2807633
>
我仍然无法复制你的问题。就像我上面所说的那样,str(m103)
的输出和str(a)
的输出将提供信息。另外,sessionInfo()
。没错,我会坚持以前的猜测......