7

長い執筆活動の中断から R に戻ったばかりで、データの再形成方法を思い出すのにいくつかの実際の問題があります。やりたいことは簡単だとわかっているのに、どういうわけか今夜は口がきけず、溶けて形を変えることで自分自身を混乱させてしまいました。誰かがすぐに私を正しい方向に向けることができれば、それは非常に高く評価されます.

私はそのようなデータフレームを持っています:

person    week    year   
personA   6       1
personA   22      1
personA   41      1
personA   42      1
personA   1       2
personA   23      2
personB   8       2
personB   9       2
....
personN   x       y

私は年ごと、人ごとのイベントの数を知りたいです:

例えば

person    year1    year2
personA   4        2
personB   0        2

読んでくれてありがとう。

4

3 に答える 3

8

再形成と集約の両方を 1 つのステップで処理するため、おそらくreshape2パッケージと関数を使用します。dcast

library(reshape2)
> dcast(person ~ year, value.var = "year", data = dat)
Aggregation function missing: defaulting to length
   person 1 2
1 personA 4 2
2 personB 0 2
于 2012-05-06T14:56:37.233 に答える
7

この場合、次のように簡単に使用できますtapply

> with(data, tapply(week, list(person=person, year=year), length))
         year
person     1 2
  personA  4 2
  personB NA 2

結果は行列です。空のセルがある場合、このソリューションは NA を生成します。

于 2012-05-06T15:09:52.710 に答える
5

xtabsベースRからこの問題に対して非常にうまく機能します:

dat <- read.table(text="person    week    year   
personA   6       1
personA   22      1
personA   41      1
personA   42      1
personA   1       2
personA   23      2
personB   8       2
personB   9       2
", header=TRUE)
xtabs(~person+year, data=dat)
#-----------------
         year
person    1 2
  personA 4 2
  personB 0 2

テーブル/マトリックスオブジェクトを返すため、出力をmatplotに渡すことができます。

matplot( xtabs(~person+year, data=dat))

この小さな例の出力x軸は希望どおりではないかもしれませんが、年を重ねるにつれて、より満足のいくデフォルトの軸ラベルが作成される可能性があります。または、xaxt = "n"を使用axisしてデフォルトのx軸ラベルを抑制し、必要に応じてラベル付けに使用することもできます。

matplot(  xtabs(~person+year, data=dat), xaxt="n", type="b")
于 2012-05-06T15:44:40.980 に答える