5

私のデータセットは、個人ごとに 3 つの処理 (C、S、および E) で構成されています。このように見えます。

    Year   Cultivar   Site   Distance   Plant   Treat    yield1   yield2
1   2011   Blue       ABR    0m         1       C        0.879    1.5
2   2011   Blue       ABR    0m         1       S        0.384    2.3
3   2011   Blue       ABR    0m         1       E        0.03     0.5
4   2011   Blue       ABR    0m         2       C        0.923    1.2
5   2011   Blue       ABR    0m         2       S        0.344    0.5
6   2011   Blue       ABR    0m         2       E        0.07     0.7
7   2011   Blue       ABR    50m        1       C        0.255    3.4
8   2011   Blue       ABR    50m        1       S        1.00     2.4
9   2011   Blue       ABR    50m        1       E        0.1      0.9
.
.
.

2 年分のデータ、2 つの栽培品種、15 のサイト、サイトあたり 3 つの距離、および距離あたり 10 の植物があります。基本的に、大量のデータ (>1400 行) があります。私ができるようにしたいのは、研究全体で各個人に新しい番号を割り当てる新しい列を追加することです. 私は自分のデータをこのように仕上げたいと思っています。

    Individual  Year   Cultivar   Site   Distance   Plant   Treat    yield1   yield2
1   1           2011   Blue       ABR    0m         1       C        0.879    1.5
2   1           2011   Blue       ABR    0m         1       S        0.384    2.3
3   1           2011   Blue       ABR    0m         1       E        0.03     0.5
4   2           2011   Blue       ABR    0m         2       C        0.923    1.2
5   2           2011   Blue       ABR    0m         2       S        0.344    0.5
6   2           2011   Blue       ABR    0m         2       E        0.07     0.7
7   3           2011   Blue       ABR    50m        1       C        0.255    3.4
8   3           2011   Blue       ABR    50m        1       S        1.00     2.4
9   3           2011   Blue       ABR    50m        1       E        0.1      0.9
.
.
.

私はRに比較的慣れていないので、これが比較的簡単にできるはずであれば申し訳ありません。植物*距離*場所*栽培品種*年の一意の組み合わせとして各個体を「見つける」ことができるはずですが、正直なところ、これをどのようにコーディングするのかわかりません。見つけることができませんでした同様のヘルプ ページ。

どんな提案でも大歓迎です!

4

4 に答える 4

4

を使用したソリューションは次のplyrとおりです。

library(plyr)
df$id <- id(df[c("Year","Cultivar", "Site", "Distance", "Plant")], drop=TRUE) 
#Add whichever columns contain the unique combination you require
df

 Year Cultivar Site Distance Plant Treat yield1 yield2 id
1 2011     Blue  ABR       0m     1     C  0.879    1.5  1
2 2011     Blue  ABR       0m     1     S  0.384    2.3  1
3 2011     Blue  ABR       0m     1     E  0.030    0.5  1
4 2011     Blue  ABR       0m     2     C  0.923    1.2  2
5 2011     Blue  ABR       0m     2     S  0.344    0.5  2
6 2011     Blue  ABR       0m     2     E  0.070    0.7  2
7 2011     Blue  ABR      50m     1     C  0.255    3.4  3
8 2011     Blue  ABR      50m     1     S  1.000    2.4  3
9 2011     Blue  ABR      50m     1     E  0.100    0.9  3
于 2013-03-07T00:16:05.213 に答える
4

そして、data.tableを使用したソリューション.GRP

.GRP は、長さ 1 の整数で、単純なグループ カウンターを含みます。第 1 グループに 1、第 2 グループに 2 など。

library(data.table)
DT <- data.table(df)

DT[,grp :=.GRP,by = list(Year,Cultivar, Site, Distance, Plant)]
于 2013-03-07T00:20:07.117 に答える
2

追加のパッケージを使用しないソリューション:

df$id <- factor(apply(df[,c("Year","Cultivar", "Site", "Distance", "Plant")], 1, paste, collapse=""))
levels(df$id) <- 1:length(levels(df$id))
于 2013-03-07T00:23:10.133 に答える
1

ここでは最善の解決策ではありませんが、解決策:

library(qdap)
df$id <- as.numeric(factor(paste2(df[qcv(terms="Year Cultivar Site Distance Plant")])))
于 2013-03-07T00:50:00.957 に答える