добавив несколько столбцов ниже другого в таблице в R - PullRequest
1 голос
/ 20 сентября 2019

Я довольно новичок в R, и мне интересно, можно ли добавить несколько столбцов в таблицу / таблицу ниже другой?

Мой пример:

my_tibble <- tibble(a = c(1:4),
                    b = c(2:5), 
                    c = c(3:6), 
                    d = c(4:7), 
                    a1 = c(4:1),
                    b2 = c(5:2), 
                    c2 = c(6:3),
                    d2 = c(7:4))

В конце я хотел бы выглядеть так:

my_tibble_1 <- tibble(a = c(1,2,3,4,2,3,4,5,3,4,5,6,4,5,6,7),
                      a1 = c(4,3,2,1,5,4,3,2,6,5,4,3,7,6,5,4))

Возможно ли это сделать в R / Tidyverse?

Спасибо большое !!

Ответы [ 2 ]

0 голосов
/ 20 сентября 2019

Если нужно выбрать столбцы с одинаковыми именами

library(dplyr)
my_tibble %>%
     select(starts_with('a'))

Или, если мы заинтересованы в объединении первых 4 столбцов в один столбец, следующих 4 в качестве 2-го, то используйте splitи преобразовать его в data.frame

out <- data.frame(lapply(split.default(my_tibble, rep(c('a', 'a1'), 
           each = 4)), unlist))
row.names(out) <- NULL

out
#   a a1
#1  1  4
#2  2  3
#3  3  2
#4  4  1
#5  2  5
#6  3  4
#7  4  3
#8  5  2
#9  3  6
#10 4  5
#11 5  4
#12 6  3
#13 4  7
#14 5  6
#15 6  5
#16 7  4

Если он основан на вхождении 'a' в качестве префикса в имени столбца

grp <- cumsum(startsWith(names(my_tibble), 'a'))
data.frame(lapply(split.default(my_tibble, grp), unlist))
0 голосов
/ 20 сентября 2019

Возможно, я неправильно понял ваш вопрос, но я постараюсь ответить.Вам необходимо предоставить список столбцов в соответствии с желаемым порядком:

my_order <- c("a", "a1")
my_tibble[ ,my_order]

Если вы хотите объединить столбцы с 1 по 4 и с 5 по 8 в два новых столбца:

nc <- ncol(my_tibble)
my_new_df <- data.frame(a = Reduce(`c`, my_tibble[, 1:(nc/2)]),
           a1 = Reduce(`c`, my_tibble[, (nc/2+1):nc]))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...