2015-04-04 2 views
1

Предположим, у меня есть кадр данныхВозвращаясь несколько столбцов в одном dplyr вызова

df <- data.frame(id = 1:2, vectors = I(list(1:15, 4:20))) 

, и я хочу добавить несколько столбцов с квантилей каждого вектора, я могу сделать это с помощью одной строки кода с возможно do() или какой-либо форме mutate()?

+1

Если вы хотите добавить список в качестве колонки, возможно, 'df1 <- bind_cols (ДФ, ДФ%>% построчно()%> % do (qnt = quantile (. $ vector))) 'или' df%>% mutate (qnt = lapply (векторы, квантиль)) ' Если вы можете показать ожидаемый формат, было бы полезно – akrun

+0

i'm on запустите, но я буду готовить что-то позже ... короче, я хочу 0%, 25% и т. д. в качестве столбцов, похоже, я могу создать dataframe через 'do()', затем 'bind_cols'? – kevinykuo

+0

Я думаю 'bind_cols (df, as.data.frame (do.call (rbind, lapply (df $ vector, quantile))))' – akrun

ответ

1

Одним из вариантов является

library(dplyr) 
df1 <- df %>% 
      rowwise() %>% 
      do(qnt= quantile(.$vectors)) 
bind_cols(df, as.data.frame(do.call(rbind, df1$qnt))) 
# id  vectors 0% 25% 50% 75% 100% 
#1 1 1, 2, 3,.... 1 4.5 8 11.5 15 
#2 2 4, 5, 6,.... 4 8.0 12 16.0 20 

Или

bind_cols(df, df %>% 
       rowwise() %>% 
       do(qnt= as.data.frame(t(quantile(.$vectors))))%>% 
       lapply(., bind_rows) %>% 
       .$qnt) 
Смежные вопросы