У меня следующая проблема.У меня есть список столбцов тибблов, которые я хочу очистить, просто взяв определенные значения и создав из них новый тиббл.Проблема в том, что не все столбцы доступны в оригинальной таблице, поэтому я хотел бы заменить их на NA.Пример прояснит это.
ДАННЫЕ:
tbl <- tibble(list_col = list(tibble(id = c("A", "B", "C"),
val1 = c(1, 2, 3),
val2 = c(11, 22, 33)),
tibble(id = c("A", "B", "C"),
val1 = c(1, 2, 3))))
Реальные данные более сложны, но этого будет достаточно, чтобы показать проблему.Я создал функцию для выбора столбцов, которые я хотел бы иметь.Я теперь все дни обертываю с possibly
, чтобы избежать провала.
get_res <- possibly(function(ls){
out = tibble(id = ls$id,
val1 = ls$val1,
val2 = ls$val2)
return(out)
}, otherwise = NA)
Тогда я обычно map
работаю с mutate
, чтобы создать чистый столбец.
tbl %>%
mutate(clean = map(list_col, get_res))
# A tibble: 2 x 2
list_col clean
<list> <list>
1 <tibble [3 x 3]> <tibble [3 x 3]>
2 <tibble [3 x 2]> <lgl [1]>
Warning message:
Unknown or uninitialised column: 'val2'.
Ожидаемый результат, но как я могу обойти это и заменить val2 на NA во втором столбце и вернуть значения, которые у меня есть?
Я думал, что это сработало бы:
get_res2 <- possibly(function(ls){
out = tibble(id = ls$id,
val1 = ls$val1,
val2 = tryCatch(ls$val2, error=function(e) NA))
return(out)
}, otherwise = NA)
Но это не удастсяа также.