将变量名称存储为对应的列值

时间:2018-10-23 03:34:00

标签: r

请考虑以下内容:

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 :(得分:2)

expand.gridrbind一起使用:

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

答案 1 :(得分:2)

这里是$dt =$line -as [datetime]

的一个选项
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

答案 2 :(得分:2)

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

答案 3 :(得分:1)

另一种选择是将所有变量添加到列表中,然后创建一个数据框。

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