#r #dplyr #data.table
#r #dplyr #данные.таблица
Вопрос:
a1 <- data.frame(id=c(1,1,1,1,2,2,2,3,3),
var=c("A",NA,NA,"B","B","B",NA,NA,NA))
desired_1 <- data.frame(id=c(1,2,3),
A=c(T,NA,NA),
B=c(T,T,NA),
None=c(NA,NA,T))
desired_2 <- data.frame(id=c(1,1,2,3),
type=c("A","B","B","None"))
какой наиболее эффективный метод для генерации обоих desired_1
и desired_2
с использованием data.table
или dplyr
?
Комментарии:
1. Ваш
a1
правильный?2. Я полагаю, что вы хотите получить
desired_2
в качестве конечной цели3. @akrun — Да, всегда можно преобразовать их в более широкую форму
Ответ №1:
Мы можем сгруппировать по ‘id’ с помощью summarise
, чтобы получить ‘None’ if
все элементы в ‘var’, NA
или else
вернуть unique
элементы, отличные от NA ‘var’
library(dplyr)
a1 %>%
group_by(id) %>%
summarise(var = if(all(is.na(var))) "None" else unique(var[!is.na(var)]) )
# A tibble: 4 x 2
# Groups: id [3]
# id var
# <dbl> <chr>
#1 1 A
#2 1 B
#3 2 B
#4 3 None
Или с помощью data.table
library(data.table)
setDT(a1)[, .(var = if(all(is.na(var))) "None" else unique(var[!is.na(var)])), id]