3

1 つの列にエントリの繰り返しがあるデータ フレームがあります。その1つの列に基づいて、他の列を要約したいと思います。要約を作成するときに、合計数ではなく、それぞれの一意のエントリを考慮して要約を作成したいと思います。たとえば、以下のデータ フレームの例で、調査対象の若者、中年、老人の人数に関する質問に回答したい場合は、 "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を持つ男性と女性の両方がいる場合でも、2回カウントします。しかし、私はあなたのデータには当てはまらないと思います。本当に確認したい場合は、次のことができます。

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 に答える