сохранить имя переменной как соответствующие значения столбца - PullRequest
0 голосов
/ 23 октября 2018

Рассмотрим следующее:

x <- c("a", "b", "c", "d" , "e", "f")
y <- c("N", "M")
z <- c("P", "Q")

Конечный продукт, который я хочу:

A B
x a
x b
x c
x d
x e
x f
y N
y M
z P
z Q  

Вот что я пробовал до сих пор

rbind(x, y, z)
data.frame(c(x, y, z))
cbind(x, y, z)
stack(x, y, z)
merge(x, y, z)

Ответы [ 4 ]

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

Другой вариант - добавить все переменные в список, а затем создать фрейм данных.

lst <- list(x = x, y = y, z = z)
data.frame(A = rep(names(lst), lengths(lst)), B = unlist(lst), row.names = NULL)

#   A B
#1  x a
#2  x b
#3  x c
#4  x d
#5  x e
#6  x f
#7  y N
#8  y M
#9  z P
#10 z Q
0 голосов
/ 23 октября 2018

Вот опция с tidyverse

library(tidyverse)
mget(letters[24:26]) %>%
   enframe %>% 
   unnest
# A tibble: 10 x 2
#   name  value
#   <chr> <chr>
# 1 x     a    
# 2 x     b    
# 3 x     c    
# 4 x     d    
# 5 x     e    
# 6 x     f    
# 7 y     N    
# 8 y     M    
# 9 z     P    
#10 z     Q    

Обратите внимание, что по умолчанию enframe дает имена столбцов в виде «name» и «value», но имена можно изменить, указав аргументык пользовательским именам

mget(letters[24:26]) %>%
    enframe(name = "A", value = "B") %>% 
    unnest
0 голосов
/ 23 октября 2018

stack - это то, что вы хотите, за исключением использования именованного list:

stack(list(x=x,y=y,z=z)) #or
stack(mget(c("x","y","z")))

#   values ind
#1       a   x
#2       b   x
#3       c   x
#4       d   x
#5       e   x
#6       f   x
#7       N   y
#8       M   y
#9       P   z
#10      Q   z
0 голосов
/ 23 октября 2018

Использование expand.grid с rbind:

df <- rbind(expand.grid("x", x), expand.grid("y", y), expand.grid("z", z))
names(df) <- c("A", "B")
df

   A B
1  x a
2  x b
3  x c
4  x d
5  x e
6  x f
7  y N
8  y M
9  z P
10 z Q
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...