3

我有一个数据框,其中一列中有重复的条目。我想根据那一列总结其他列。我希望摘要在进行摘要时考虑每个唯一条目而不是总数。例如在下面的数据框示例中,如果我想回答有关被调查的人有多少是年轻人、中年人和老年人的问题? "RefID" 1-1 在总结 "ageclass"=young 时被视为计数 1,而不是被解释为计数 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

谢谢你。

4

3 回答 3

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此处提到的解决方案。

于 2011-02-16T12:41:41.230 回答
2

plyr软件包对此很有用。例如,您可以这样做:

> require(plyr)
> ddply( df, .(ageclass), summarise, Num = length(unique(RefID)))
  ageclass Num
1   midage   1
2      old   6
3    young   1
于 2011-02-16T12:47:16.913 回答
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 
于 2011-02-16T12:41:48.720 回答