Преобразовать фрейм данных с целочисленными столбцами в столбец списка, где каждый элемент в списке является целочисленным вектором - PullRequest
1 голос
/ 29 апреля 2019

Я хотел бы преобразовать фрейм данных из 7 столбцов, icols , в столбец списка целочисленных векторов.

 icols <- structure(list(CBT = c(0, 0, 0, 1, 1), MI = c(0, 1, 1, 1, 1), 
        Educ = c(0, 0, 0, 0, 0), Fam = c(0, 0, 0, 0, 0), CM = c(0, 
        0, 0, 0, 0), PeerGroup = c(0, 0, 0, 0, 0), ICM = c(0, 0, 
        0, 0, 0)), row.names = c(NA, -5L), class = c("tbl_df", "tbl", 
    "data.frame"))

Приведенный ниже код создает вектор символьных строк.

  > do.call(paste, as.data.frame(icols))
    [1] "0 0 0 0 0 0 0" "0 1 0 0 0 0 0" "0 1 0 0 0 0 0" "1 1 0 0 0 0 0" "1 1 0 0 0 0 0"

Я хотел бы создать столбец списка, в котором 7 элементов каждой строки становятся целочисленным вектором.

Требуемый вывод выглядит примерно так:

     CBT    MI  Educ   Fam    CM PeerGroup   ICM  new_column
   <dbl> <dbl> <dbl> <dbl> <dbl>     <dbl> <dbl>   <list>
 1     0     0     0     0     0         0     0   <int [7]>
 ... 

1 Ответ

1 голос
/ 29 апреля 2019

Один вариант с tidyverse будет

library(tidyverse)
icols %>% 
    mutate(desired_column = pmap(., ~ c(..., use.names = FALSE)))
# A tibble: 5 x 8
#    CBT    MI  Educ   Fam    CM PeerGroup   ICM desired_column
#  <dbl> <dbl> <dbl> <dbl> <dbl>     <dbl> <dbl> <list>        
#1     0     0     0     0     0         0     0 <dbl [7]>     
#2     0     1     0     0     0         0     0 <dbl [7]>     
#3     0     1     0     0     0         0     0 <dbl [7]>     
#4     1     1     0     0     0         0     0 <dbl [7]>     
#5     1     1     0     0     0         0     0 <dbl [7]>     

Если «требуемый столбец» должен быть integer класс

icols %>% 
    mutate(desired_column = pmap(., ~ c(..., use.names = FALSE) %>% 
              as.integer))

Или с split из base R

icols$desired_column <- split(unlist(icols, use.names = FALSE), row(icols))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...