2016-06-03 8 views
1

Я хочу извлечь значения из разных столбцов в зависимости от значения столбца x. Этот столбец находится в кадре 1 данных и содержит различные уровни факторов (например, 1,2,3,4,5,6). Столбцы, где я хочу, чтобы извлечь значения из в dataframe 2. Примеры обоих dataframes:Извлечение значений разных столбцов

Dataframe 1 называется istrata (173 строк)

> istrata[1:5,] 
     POSCODN Geslacht Agegrp 
    1 2651 0.4761905  1 
    2 2651 0.4761905  5 
    3 2652 0.5785124  1 
    4 2652 0.5785124  1 
    5 2661 0.5270758  3 

Dataframe 2 называется strata с (1721 строк) :

 > strata[1:5,] 
     POSCODN Geslacht agegrp_1 agegrp_2 agegrp_3 agegrp_4 agegrp_5 agegrp_6 
    1  2651 0.4761905 0.34085213 0.10025063 0.13784461 0.27318296 0.13784461 0.010025063 
    2  2652 0.5785124 0.34710744 0.23966942 0.11570248 0.19008264 0.10743802 0.000000000 
    3  2661 0.5270758 0.36462094 0.13357401 0.15162455 0.25270758 0.09747292 0.000000000 
    4  2662 0.6229508 0.39344262 0.26229508 0.11475410 0.21311475 0.01639344 0.000000000 
    5  2665 0.5387931 0.28448276 0.08189655 0.17241379 0.31465517 0.13362069 0.012931034 

Таким образом, в конце концов, я хочу добиться того, что, когда в первом ряду dataframe 1, Agegrp равен 1, то приписывает значение dataframe 2 из строки 1 (с аналогичной POSCODN), колонка 3 (agegrp_1). Другой пример, строка 5 в dataframe 1 находится в Agegrp 5 и имеет POSCODN 2661. Итак, здесь следует обратить внимание на строке 3 в dataframe 2 и 4 столбца (agegrp_3) См dataframe пример ниже (в дополнение к istrata):

 Geslacht  I_Agegrp 
1  0.4761905 0.34085213 
2  0.4761905 0.13784461 
3  0.5785124 0.34710744 
4  0.5785124 0.34710744 
5  0.5270758 0.15162455 

Есть ли способ сделать это?

Помощь очень ценится!

+1

Вы можете использовать 2-мерную матрицу в качестве индекса 'ДФ [cbind (seq_along (х), х + 1L) ] ' –

ответ

2

С помощью для ?'[':

При индексации массивов по [одного аргумента я может быть матрица с как многих колонн, как есть размеры х; результатом является вектор с элементами, соответствующими наборам индексов в каждой строке i.

Таким образом, подмножество может быть матрицей. столбец 1 будет строками, а столбец 2 будет представлять столбцы.

Если x is x <- c(3,2,1,1,1), мы можем комбинировать это с рядами 1:nrow(df). Матрица будет выглядеть следующим образом:

cbind(1:nrow(df), x) 
     x 
[1,] 1 3 
[2,] 2 2 
[3,] 3 1 
[4,] 4 1 
[5,] 5 1 

Если бы мы использовали эту матрицу подмножество df[cbind(1:nrow(df), x)], то первая добыча будет df[1,3], второй экстракции df[2,2] и так далее. Но нам нужно учитывать столбец Gender и добавить 1 ко второй колонке, x + 1.

df[cbind(1:nrow(df), x+1)] 
[1] 0.1378446 0.2396694 0.3646209 0.3934426 0.2844828 

Редактировать

С новыми названиями:

strata[cbind(1:nrow(strata), istrata$Agegrp + 1L)] 
+0

Спасибо, только я все еще немного потерян. Использует ли 'df' для dataframe 1 или dataframe 2? И 'x + 1' не работает, поскольку имена столбцов в dataframe 2 отличаются. Или я чего-то не хватает? – Keizer

+0

Да 'df' - просто пример имени фрейма. 'x' для столбца с' 3 2 1 1 1'. Вы не указали ни одного имени фрейма данных, поэтому я использовал имя по умолчанию. Если вы хотите, чтобы я буквально написал весь ваш код для вас. дайте мне имена обоих с соответствующими именами столбцов. –

+0

Спасибо, потому что я не вижу полностью понять, что менять. Я обновил свой пост с помощью dataframe и имен столбцов и первых 5 строк данных. – Keizer

Смежные вопросы