将每一行与相应的列合并以形成垂直表

时间:2019-02-12 21:09:14

标签: r dataframe

我正在尝试将b中的每一行合并到a中的每一列,以便可以创建所有数据的垂直表。

假设我有以下内容:

a <- data.frame(col1 = c(1,2,3,4), col2=c(5,6,7,8), col3=c(9,10,11,12))
b <- data.frame(p=c('a', 'b', 'c'))

我想为a的每一行合并b中的相应列。 注意:首选基础R解决方案,但其他解决方案将很有趣。

试图使最终结果看起来像这样:

p | val
-------
a | 1
a | 2
a | 3
a | 4
b | 5
b | 6
b | 7
b | 8
c | 9
c | 10
c | 11
c | 12 

1 个答案:

答案 0 :(得分:1)

可以通过将“ a”数据集的列名称设置为“ b”的“ p”列,然后stack将data.frame设置为两列data.frame列,代表列名,第二列代表列的值

stack(setNames(a, b$p))

或使用tidyverse

library(tidyverse)
a %>%
   rename_all(~ b$p) %>%
   gather %>% 
   rename(!! rlang::sym(names(b)) := key, val = value)