R добавить последнюю строку к фрейму данных - PullRequest
0 голосов
/ 11 июня 2018

У меня есть фрейм данных (df), который разделяет ключевой столбец ($ Name) со списком фреймов данных:

head(df)
# A tibble: 6 x 3 ##truncating to show first 2 rows only
  Name      var1  var2
 <chr>      <chr> <chr>
1 Tom Marks LAX   ORD
2 Bob Sells MIA   CHI

У меня есть список фреймов данных, который содержит исторические данные для каждого человекасодержится в df $ Name.

head(employees$'Tom Marks')
Name      date       var3
Tom Marks 2017-01-01 250
Tom Marks 2017-01-02 457

head(employees$'Bob Sells')
Name      date       var3
Bob Sells 2017-01-01 385
Bob Sells 2017-01-02 273

Я хотел бы добавить значение в список var3 из списка сотрудников в df к самой последней дате (которая всегда является последней строкой в сотрудников список).Например, вывод после сопоставления Tom Marks из df $ Name с сотрудниками $ 'Tom Marks' будет выглядеть следующим образом:

head(df)
  Name      var1  var2  var3
 <chr>      <chr> <chr> <num>
1 Tom Marks LAX   ORD   457
2 Bob Sells MIA   CHI   273

Я потратил приличное количество времени на исследованиеФильтрация объединений, изменение объединений, функции bind_rows, redu (), но безуспешные попытки выполнить то, что, вероятно, является легкой задачей для порядочного программиста.Я надеюсь, что кто-то может избавить меня от моих страданий и дать какое-то лучшее направление или, еще лучше, ответ!

Спасибо!

Ответы [ 2 ]

0 голосов
/ 11 июня 2018

Если вы всегда после последнего ряда, вы можете использовать tail, чтобы получить его:

library(tidyverse)
left_join(
  df, 
  map_df(employees, ~ tail(.x, 1))  
)
0 голосов
/ 11 июня 2018

Это решение основано на том факте, что ваши данные упорядочены так, как вы сказали, но вы можете легко упорядочить список по date, если они не были таковыми.

library(tidyverse)
df %>% left_join(
  df_list$employees %>% 
    bind_rows() %>% 
    group_by(Name) %>% 
    summarise_at(vars(var3), last))

#        Name var1 var2 var3
# 1 Tom Marks  LAX  ORD  457
# 2 Bob Sells  MIA  CHI  273

Данные

df <- data.frame(Name = c("Tom Marks", "Bob Sells"),
                 var1 = c("LAX", "MIA"),
                 var2 = c("ORD", "CHI"))

df_list <- list(employees = list(
  `Tom Marks` = data.frame(Name = "Tom Marks",
                           date = c("2017-01-01", "2017-01-02"),
                           var3 = c(250, 457)),
  `Bob Sells` = data.frame(Name = "Bob Sells",
                           date = c("2017-01-01", "2017-01-02"),
                           var3 = c(385, 273))
))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...