Найдите правильное значение ячейки при заданных условиях в больших фреймах данных - PullRequest
0 голосов
/ 09 июля 2020

У меня есть два больших фрейма данных, скажем, df1 и df2. Я хочу добавить одно значение при определенных условиях к df2.

df2 содержит pepole - ie:

> df2
  ID Age Gender
1  1  20      M
2  2  30      K
3  3  40      M
4  4  60      M

Тогда у меня есть df1, который содержит много информации, одно число для для каждого возраста от 0 до 100 и для каждого пола. Мне нужно найти номер корректа для моего человека. Скажем, я ищу возраст 30, я получаю

> df1[df1[,'V10'] == 30,]
    V5 V10  V12
31   K  30 5.91
151  M  30 5.33

В df2 мне нужно значение 5,91, так как мой персонаж женский. Вот так

> df1[df1[,'V10'] == 30 &
+       df1[,'V5'] == 'K', 'V12']
[1] 5.91

Сначала я попробовал это в for-l oop, но это занимает слишком много времени. Затем я попробовал с ()

df2$number <- with(df2, df1[df1[,'V10'] == Age &
                              df1[,'V5'] == Gender, 'V12'])

, но я дал мне только одно значение для всех.

Надеюсь, некоторые из вас понимают мою проблему и могут мне помочь. Моя основная проблема в том, что время работы слишком велико.

1 Ответ

0 голосов
/ 09 июля 2020

Как было сказано в комментарии, вы можете использовать merge, чтобы получить значение V12 для каждого пола и возраста.

Я создал несколько фиктивных данных, чтобы показать, как это можно сделать.

df2 <- data.frame(ID = 1:6,
              Age = c(20,30,40, 40, 60, 60),
              Gender = c("M","K","M", "K", "M", "K"))

df1 <- data.frame(V5 = rep(c("K", "M"), 41),
              V10 = rep(20:60, each= 2),
              V12 = runif(82, 1,10))

df <- merge(df2, df1, by.x=c("Age", "Gender"), by.y=c("V10", "V5"))

С помощью функции merge() вы можете объединить более одного столбца, указав имена столбцов в аргументе by.

by.x используется для столбцов из первого data.frame, используемого в качестве ввода (df2 в данном случае) и by.y для имен столбцов df1.

Если хотите, вы можете использовать left_join из dplyr пакет. Вы можете проверить это сообщение stackoverflow.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...