我有一个数据框,其中一列中有重复的条目。我想根据那一列总结其他列。我希望摘要在编制摘要时考虑每个唯一条目而不是总计数。 例如,在下面的数据框示例中,如果我想回答关于有多少人被调查的年轻人,中年人和老年人的问题?“RefID”1-1在摘要中被视为1的计数“ageclass”=年轻,不解释为5。
RefID Altitude Sex ageclass
1-1 Low F young
1-1 Low F young
1-1 Low F young
1-1 Low F young
1-1 Low F young
1-2 Low F midage
1-2 Low F midage
1-2 Low F midage
1-2 Low F midage
1-2 Low F midage
1-2 Low F midage
1-2 Low F midage
1-2 Low F midage
1-2 Low F midage
1-2 Low F midage
1-2 Low F midage
1-2 Low F midage
1-3 Low F old
1-3 Low F old
1-3 Low F old
1-3 Low F old
1-3 Low F old
1-3 Low F old
1-3 Low F old
1-3 Low F old
1-3 Low F old
1-3 Low F old
1-3 Low F old
1-3 Low F old
1-3 Low F old
1-3 Low F old
1-3 Low F old
1-3 Low F old
1-3 Low F old
1-3 Low F old
1-4 Low F old
1-4 Low F old
1-4 Low F old
1-4 Low F old
1-4 Low F old
1-4 Low F old
1-4 Low F old
1-4 Low F old
1-4 Low F old
1-4 Low F old
1-4 Low F old
1-4 Low F old
1-5 Low F old
1-5 Low F old
1-5 Low F old
1-5 Low F old
1-5 Low F old
1-5 Low F old
1-5 Low F old
1-7 Low F old
1-7 Low F old
1-7 Low F old
1-7 Low F old
1-8 Low F old
1-8 Low F old
1-9 Low F old
1-9 Low F old
1-9 Low F old
谢谢。
答案 0 :(得分:2)
要获取数据框中的唯一条目,请参阅?uniqe:
Data <- unique(Mydata)
您可以使用:
by(Data,Data$ageclass,summary)
另见?summary
以了解结果。如果您对计数感兴趣,可以使用table
,例如:
table(Data$RefID,Data$ageclass)
或摘要:
margin.table(table(Data$RefID,Data$ageclass),margin=2)
编辑:
你必须要小心,因为unique()
采用了独特的行。如果你有男性和女性都有refid 1-1,那么你仍然会计算两次。但我认为你的数据不会是这种情况。如果你真的想确定,你可以这样做:
with(unique(Data[c(1,4)]),margin.table(table(RefID,ageclass),margin=2))
或采取此处提到的plyr
解决方案。
答案 1 :(得分:2)
plyr
包对此非常有用。例如。你可以这样做:
> require(plyr)
> ddply( df, .(ageclass), summarise, Num = length(unique(RefID)))
ageclass Num
1 midage 1
2 old 6
3 young 1
答案 2 :(得分:0)
使用subset
创建数据的子集,使用duplicated
得到一个逻辑向量,指示值是否已在向量中出现。首先是一个小样本数据集:
df <- data.frame(
ID=rep(1:5,each=5),
attitude="low",
sex=c(rep("F",10),rep("M",15)),
age=c(rep("young",5),rep("middle",10),rep("old",10))
)
然后你可以制作一个子集,其中只记录第一次输入每个ID:
df.sub <- subset(df,!duplicated(df$ID))
然后你可以总结一下:
> summary(df.sub$age)
middle old young
2 2 1