2013-03-07 2 views
5

Мой набор данных состоит из трех процедур (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 
+0

Спасибо большое @alexwhan !! Работает отлично :) – melanopygus

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

Раствор без использования дополнительных пакетов:

df$id <- factor(apply(df[,c("Year","Cultivar", "Site", "Distance", "Plant")], 1, paste, collapse="")) 
levels(df$id) <- 1:length(levels(df$id)) 
+0

или просто 'as.numeric (df $ id)'? – mnel

1

Не самое лучшее решение здесь, но решение:

library(qdap) 
df$id <- as.numeric(factor(paste2(df[qcv(terms="Year Cultivar Site Distance Plant")]))) 
Смежные вопросы