使用R将两列的内容合并为一列

Combine the contents of two columns into one column using R

我得到了一些这样的数据

structure(list(id = c(1, 1, 1), time1 = c(10, 20, 30), time2 = c(15, 25, 35)), row.names = c(NA, 3L), class = "data.frame")

我想从上述数据的两列中创建一个列

structure(list(id = c(1, 1, 1, 1, 1, 1), time = c(10, 15, 20, 25, 30, 35)), row.names = c(NA, 6L), class = "data.frame")

我认为这与转换为长格式不同,因为我不希望 gather() 产生两列,其中一列是所用列的名称,一列是值。

我们可以使用 pivot_longer 这应该更通用,因为它也可以根据其他模式和多列进行整形。请注意,pivot_longer 继承了 reshape2 功能 melt,具有更多增强功能和错误修复

library(dplyr)
library(tidyr)
pivot_longer(df1, cols = time1:time2, values_to = 'time') %>%
      select(-name)

-输出

# A tibble: 6 x 2
#     id  time
#  <dbl> <dbl>
#1     1    10
#2     1    15
#3     1    20
#4     1    25
#5     1    30
#6     1    35

或使用 base Rstack

transform(stack(df1[-1])[1], id = rep(df1$id, 2))[2:1]

或者可以使用 data.frameunlist

data.frame(id = df1$id, value = unlist(df1[-1], use.names = FALSE))

tidyr 的替代方案,虽然这是一个很好的方法:

reshape2::melt(dat, "id")[,-2]
#   id value
# 1  1    10
# 2  1    20
# 3  1    30
# 4  1    15
# 5  1    25
# 6  1    35

(通常它包含旋转列名称作为列本身,因此 [,-2] 将其删除,因为您的预期输出没有它。您可以只 melt(.) 如果您 want/need 保留它。)