Повторите список во фрейме данных в R - PullRequest
1 голос
/ 25 сентября 2019

У меня есть список, скажем,

k<-c(1,2,3,4)

Я хочу создать фрейм данных, скажем, по 5 строк, используя один и тот же список в каждой строке, как показано ниже.

  X1 X2 X3 X4
1  1  2  3  4
2  1  2  3  4
3  1  2  3  4
4  1  2  3  4
5  1  2  3  4

Iпопытался сделать: -

> rep(k, each = 5)
 [1] 1 1 1 1 1 2 2 2 2 2 3 3 3 3 3 4 4 4 4 4 

Однако я не могу получить ожидаемый результат.Есть предложения?

Ответы [ 4 ]

3 голосов
/ 25 сентября 2019
data.frame(t(replicate(5, k)))
#OR
data.frame(matrix(rep(k, each = 5), 5))
#OR
data.frame(t(sapply(1:5, function(x) k)))
#  X1 X2 X3 X4
#1  1  2  3  4
#2  1  2  3  4
#3  1  2  3  4
#4  1  2  3  4
#5  1  2  3  4
3 голосов
/ 25 сентября 2019

Вот один вариант, преобразовав vector в list с as.list, изменив его на data.frame (as.data.frame и rep лицензируют строки

as.data.frame(as.list(k))[rep(1, 5),]
#   X1 X2 X3 X4
#1    1  2  3  4
#1.1  1  2  3  4
#1.2  1  2  3  4
#1.3  1  2  3  4
#1.4  1  2  3  4

Или другой вариант - взять транспонирование вектора для получения матрицы строк, rep лицензировать строки и преобразовать в data.frame

as.data.frame(t(k)[rep(1, 5),])

В tidyverse, один вариант:преобразовать в tibble, а затем uncount

library(dplyr)
library(tidyr)
library(stringr)
as.list(k) %>% 
    set_names(str_c("X",  seq_along(k))) %>% 
    as_tibble %>% 
    uncount(5)
# A tibble: 5 x 4
#     X1    X2    X3    X4
#  <dbl> <dbl> <dbl> <dbl>
#1     1     2     3     4
#2     1     2     3     4
#3     1     2     3     4
#4     1     2     3     4
#5     1     2     3     4
1 голос
/ 25 сентября 2019
purrr::map_dfc(k, rep, 5)

# # A tibble: 5 x 4
#      V1    V2    V3    V4
#   <dbl> <dbl> <dbl> <dbl>
# 1     1     2     3     4
# 2     1     2     3     4
# 3     1     2     3     4
# 4     1     2     3     4
# 5     1     2     3     4
0 голосов
/ 25 сентября 2019

Использование data.table:

k = c(1,2,3,4)

n = 5 # Number of rows

df = data.table()
df = df[, lapply(1:length(k), function(x) rep(k[x], n))]

> df
   V1 V2 V3 V4
1:  1  2  3  4
2:  1  2  3  4
3:  1  2  3  4
4:  1  2  3  4
5:  1  2  3  4
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...