【问题标题】:Merge each row with corresponding column to form a vertical table将每一行与对应的列合并,形成一个垂直表格
【发布时间】:2019-02-12 21:09:13
【问题描述】:

我正在尝试将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'))

我想为b 的每一行合并a 中的相应列。 注意:更喜欢基本 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 

【问题讨论】:

  • 这不是和之前的stack(setNames(a, b$p))类似
  • 神圣的蝙蝠侠,你怎么想的这么快?你为我节省了大约一个小时的实验时间。需要了解这个堆栈命令。
  • @akrun 随意将其作为答案
  • @akrun - 我会支持你的答案。很高兴有一个答案,因为现在很多人都看过这个。我喜欢保留这些问题,因为我一遍又一遍地遇到同样的问题。

标签: r dataframe


【解决方案1】:

可以通过将“a”数据集的列名设置为“b”的“p”列,然后将stackdata.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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-10-25
    • 1970-01-01
    • 1970-01-01
    • 2014-11-21
    • 1970-01-01
    • 2021-03-28
    • 1970-01-01
    相关资源
    最近更新 更多