В R столбец моего фрейма данных заполнен другими фреймами данных. Я хочу вернуть указанное значение c в качестве нового столбца в исходном кадре данных - PullRequest
0 голосов
/ 09 апреля 2020

Я скачал набор данных из Интернета. В нем 6 столбцов, а 6-й столбец заполнен другими информационными кадрами. Итак, пример:

id          homeTeam    homeScore  awayTeam     away    stats
401112436   Louisville  17         Notre Dame   35      <data.frame [4 × 4]>
401112114   Oklahoma    49         Houston      31      <data.frame [4 × 4]>
401114218   USC         31         Fresno State 23      <data.frame [4 × 4]>

Я хочу создать новый столбец в исходном кадре данных со значением в строке 1, столбце 2 кадра данных «stats» для каждой строки.

Я добавил столбец row_id с номером строки и попытался

df$new_col <- df$stats[[df$row_id]][1,2]

, но я получаю рекурсивную ошибку. Когда я жестко набираю номер

df$stats[[1]][1,2]

, он возвращает правильный номер. Я не знаю, почему это не сработает со значением row_id.

Ответы [ 2 ]

0 голосов
/ 09 апреля 2020

Мы можем использовать pluck из purrr

library(dplyr)
library(purrr)

df %>% mutate(new_col = map_dbl(stats, pluck, 2, 1))

Используя воспроизводимый пример:

temp <- data.frame(a = 1:4, b = 2:5)
df <- tibble(a = 1:2, b = 6:7, c = list(temp, temp))

df %>% mutate(new_col = map_dbl(c, purrr::pluck, 2, 1))

#      a     b c                new_col
#  <int> <int> <list>             <dbl>
#1     1     6 <df[,2] [4 × 2]>       2
#2     2     7 <df[,2] [4 × 2]>       2
0 голосов
/ 09 апреля 2020

С map мы l oop над столбцом 'stats', извлекаем второй столбец, первый элемент для создания 'new_col' в mutate и unnest элемент list

library(purrr)
library(dplyr)
library(tidyr)
df <- df %>%
         mutate(new_col = map(stats, ~  .x[[2]][1])) %>%
         unnest(c(new_col))

df
# A tibble: 2 x 4
#      a     b stats            new_col
#  <int> <int> <list>             <int>
#1     1     6 <df[,2] [4 × 2]>       2
#2     2     7 <df[,2] [4 × 2]>       2

Если столбец character, используйте map_chr, если это double, используйте map_dbl или если мы не знаем тип, тогда просто используйте map, чтобы вернуть list столбец, а затем unnest


Или в base R

df$new_col <- sapply(df$stats, function(x) x[[2]][1])

данные

temp <- data.frame(a = 1:4, b = 2:5)
df <- tibble(a = 1:2, b = 6:7, stats = list(temp, temp))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...