Как сделать фрейм данных из списка, содержащего векторы и матрицу в R - PullRequest
0 голосов
/ 10 октября 2018

Я борюсь с преобразованием списка в кадр данных в R. Я хотел бы сделать кадр данных из списка, содержащего два вектора и матрицу (x, y и z).Данные выглядят так:

x <- c(1,2,3,4,5)
y <- c(0,1,2,3,4)
z <- matrix(as.numeric(sample(100:200, 25)), nrow=5, ncol=5, byrow = TRUE)

lst <- list(x,y,z)

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

x1 y1 z
x1 y2 z
x1 y3 z
x1 y4 z
x1 y5 z
x2 y1 z
etc...

С именами столбцов x, y и z соответственно,В Stackoverflow уже есть много вопросов о преобразовании списка во фрейм данных, однако я не смог найти опцию для списка, содержащего векторы, а также фрейм данных.Опции, которые я пробовал до сих пор, не увенчались успехом.

Я попробовал:

#Option 1:
as.data.frame(lst)

#Option 2:
enframe(lst) #from the tidyverse package

#Option 3:
melt(lst) #from the reshape2 package

Что я пропустил и как я могу это исправить?

Ответы [ 2 ]

0 голосов
/ 10 октября 2018

Другой вариант - expand.grid(x, y) - который возвращает фрейм данных - к которому мы добавляем z после того, как преобразовали его в вектор.

setNames(`[<-`(expand.grid(y, x), "z", value = c(z)), c("y", "x", "z"))
#   y x   z
#1  0 1 129
#2  1 1 104
#3  2 1 187
#4  3 1 177
#5  4 1 172
#6  0 2 178
# ...
0 голосов
/ 10 октября 2018
x <- c(1,2,3,4,5)
y <- c(0,1,2,3,4)

set.seed(123)
z <- matrix(as.numeric(sample(100:200, 25)), nrow=5, ncol=5, byrow = TRUE)

df <- data.frame( z = as.vector( z ) )
df$x <- rep( x, each = nrow( df ) / length( x ) )
df$y <- rep( y, times = nrow( df ) / length( y ) )

head(df, 10)

#      z x y
# 1  129 1 0
# 2  104 1 1
# 3  187 1 2
# 4  177 1 3
# 5  172 1 4
# 6  178 2 0
# 7  150 2 1
# 8  198 2 2
# 9  120 2 3
# 10 155 2 4
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...