我的数据集包括每个人的三种治疗方法(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个品种,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来说比较新,所以如果这是相对容易做的话,我道歉。我知道我应该能够“找到”每个人作为植物*距离*网站*品种*年的独特组合,但我老实说我不知道如何编写这个,我还没有找到任何类似的帮助页面。
任何建议都将不胜感激!
答案 0 :(得分: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
答案 1 :(得分: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)]
答案 2 :(得分:2)
不使用额外包裹的解决方案:
df$id <- factor(apply(df[,c("Year","Cultivar", "Site", "Distance", "Plant")], 1, paste, collapse=""))
levels(df$id) <- 1:length(levels(df$id))
答案 3 :(得分:1)
这不是最好的解决方案,而是解决方案:
library(qdap)
df$id <- as.numeric(factor(paste2(df[qcv(terms="Year Cultivar Site Distance Plant")])))