私はdata.frame
x
次の形式で持っています:
species site count
1: A 1.1 25
2: A 1.2 1152
3: A 2.1 26
4: A 3.5 1
5: A 3.7 98
---
101: B 1.2 6
102: B 1.3 10
103: B 2.1 8
104: B 2.2 8
105: B 2.3 5
私はまたdata.frame
area
、次の形式の別のものを持っています:
species area
1: A 59.7
2: B 34.4
3: C 37.7
4: D 22.8
私は、分割したいcount
の列data.frame
x
の値によってarea
カラムdata.frame
area
とき各種列の値がdata.frame
一致
私はそれをddply
関数で動作させようとしています:
density = ddply(x, "species", mutate, density = x$count/area[,2]
しかしarea[]
、で見つかった値に一致する行のみを選択するための呼び出しの適切なインデックス構文を理解できませんx$species
。しかし、私はplyr
パッケージに非常に新しい(そしてapply*
全体として機能する)ので、これは完全に間違ったアプローチかもしれません
data.frame
次の形式のを返すことを望んでいます:
species site count density
1: A 1.1 25 0.419
2: A 1.2 152 2.546
3: A 2.1 26 0.436
4: A 3.5 1 0.017
5: A 3.7 98 1.641
---
101: B 1.2 6 0.174
102: B 1.3 10 0.291
103: B 2.1 8 0.233
104: B 2.2 8 0.233
105: B 2.3 5 0.145
これは簡単data.table
です:
library(data.table)
#converting your data to the native type for the package (by reference)
setDT(x); setDT(area)
x[area, density:=count/i.area, on="species"]
:=
これについての詳細と重要な理由については、data.table
(参照により、このビネットと特にポイントbを参照)に列を追加する自然な方法です。したがってx:=y
、に名前x
を付けた列を追加し、data.table
それに値を割り当てますy
。
フォームX[Y,]
にマージするとき、操作Y
するの行を選択することと考えることができますX
。さらに、時にY
あるdata.table
の両方で、すべてのオブジェクトX
とY
で下盛ありj
、我々が言ったかもしれないので、(つまり、コンマの後に来るもの)density:=count/area
。の列の1つを参照していることを確認する場合はY
、名前の前i.
に、の列の1つi
、つまりコンマの前にあるものを参照していることがわかるようにします。今後のマージにはビネットがあるはずです。
一般に、「異なるデータセット間で一致する」と考えるとすぐに、本能はマージする必要があります。詳細についてはdata.table
、こちらをご覧ください。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加