Фильтрация фрейма данных в зависимости от другого фрейма данных - PullRequest
2 голосов
/ 26 февраля 2020

У меня есть два фрейма данных df и df2. Я хотел бы создать новый столбец в df путем фильтрации df2, так что фильтр зависит от df. Вместо этого можно использовать for-l oop, но это довольно медленно для больших фреймов данных ... Пожалуйста, посмотрите на код. Большое спасибо заранее

Фабиан

#generating dummy data frames
df <- data.frame("var1" = 0:15)
df2 <- data.frame("var2" = 11:20, "var3" = 21:30)

# the following command unfortunatelly does not work
df$new_column <- df2 %>% filter(var2 > df$var1) %>% mean(var3)

# that's the output I want - but without a for-loop 
for (i in 1:length(df$var1)){
  h <- df2 %>% filter(var2 > df$var1[i])
  df$new_column[i] <- mean(h$var3)
}

1 Ответ

1 голос
/ 26 февраля 2020

Мы можем использовать sapply, получить все значения в df2 больше, чем каждое значение в var1 и взять mean.

df$new_column <- sapply(df$var1, function(x) 
                 mean(df2$var3[df2$var2 > x], na.rm = TRUE))
df

#   var1 new_column
#1     0       25.5
#2     1       25.5
#3     2       25.5
#4     3       25.5
#5     4       25.5
#6     5       25.5
#7     6       25.5
#8     7       25.5
#9     8       25.5
#10    9       25.5
#11   10       25.5
#12   11       26.0
#13   12       26.5
#14   13       27.0
#15   14       27.5
#16   15       28.0

Или то же самое можно использовать с map_dbl из purrr

df$new_column <- purrr::map_dbl(df$var1,
                  ~mean(df2$var3[df2$var2 > .x], na.rm = TRUE))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...