Перегруппировать строки во фрейме данных - PullRequest
3 голосов
/ 12 апреля 2019

У меня есть фрейм данных в R, который выглядит следующим образом с двумя столбцами:

ID     phone_number
Mark     866458
Paul     986564
Jack     987543
Mary     523422

Я хотел бы иметь такой вывод, где у меня есть только один столбец

Mark
866458
Paul
986564
Jack
987543
Mary
523422

Кто-нибудь знает, какой код R можно использовать для получения выходных данных?


Данные для воспроизводимости:

structure(list(ID = c("Mark", "Paul", "Jack", "Mary"), phone_number = c(866458, 
                                                                        986564, 987543, 523422)), row.names = c(NA, -4L), class = c("tbl_df", "data.frame"))

Ответы [ 4 ]

7 голосов
/ 12 апреля 2019

Мы можем транспонировать фрейм данных и затем создать один вектор значений

data.frame(new_col = c(t(df)))

#  new_col
#1    Mark
#2  866458
#3    Paul
#4  986564
#5    Jack
#6  987543
#7    Mary
#8  523422

Другой базовый параметр R с использованием mapply

data.frame(new_col = c(mapply(c, df$ID, df$phone_number)))
2 голосов
/ 12 апреля 2019

Мы также можем сделать

library(tidyverse)
pmap(df1, c) %>% 
       unlist %>% 
       tibble(new_col = .)
1 голос
/ 12 апреля 2019

Более длинный метод с промежуточным значением df, но может иметь некоторое значение в зависимости от вашего полного набора данных:

library(tidyverse)

df1 <- df %>% 
  rowid_to_column() %>%
  select(rowid, ID = phone_number) 

df2 <- df %>% 
  rowid_to_column() %>%
  select(rowid, ID) %>%
  rbind(df1) %>% 
  arrange(rowid) %>% 
  select(ID)

результат:

  ID    
  <chr> 
1 Mark  
2 866458
3 Paul  
4 986564
5 Jack  
6 987543
7 Mary  
8 523422
1 голос
/ 12 апреля 2019

Одна возможность с tidyverse:

df %>%
 rowid_to_column() %>%
 gather(var, val, -rowid) %>%
 arrange(rowid) %>%
 select(val)

     val
1   Mark
2 866458
3   Paul
4 986564
5   Jack
6 987543
7   Mary
8 523422
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...