r - 合并多列/堆叠多列

标签 r dataframe multiple-columns

所以我有 9 列

     a b c d e f g h i     
  1  1 t p 1 h p 1 v g
  2  2 e h 2 j m 2 c f 
  3  3 f g 3 k l 3 b d

我想知道如何让它们像这样

     a b c
   1 1 t p
   2 2 e h
   3 3 f g
   4 1 h p
   5 2 j m
   6 3 k l
   7 1 v g
   8 2 c f
   9 3 b d

最佳答案

我们可以通过指定要在向量列表中组合在一起的列来使用base R中的reshape

out <- reshape(df1, direction = 'long', 
    varying = list(c('a', 'd', 'g'), c('b', 'e', 'h'),
          c('c', 'f', 'i')))[c('a', 'b', 'c')]
row.names(out) <- NULL
out
#  a b c
#1 1 t p
#2 2 e h
#3 3 f g
#4 1 h p
#5 2 j m
#6 3 k l
#7 1 v g
#8 2 c f
#9 3 b d

或者使用data.table中的melt

library(data.table)
melt(setDT(df1), measure = list(c('a', 'd', 'g'), c('b', 'e', 'h'),
       c('c', 'f', 'i')), value.name = c('a', 'b', 'c'))[, variable := NULL][]

数据

df1 <- structure(list(a = 1:3, b = c("t", "e", "f"), c = c("p", "h", 
"g"), d = 1:3, e = c("h", "j", "k"), f = c("p", "m", "l"), g = 1:3, 
    h = c("v", "c", "b"), i = c("g", "f", "d")), 
    class = "data.frame", row.names = c("1", 
"2", "3"))

关于r - 合并多列/堆叠多列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60872813/

相关文章:

css - 在 Shiny 中,避免 selectInput 下拉菜单与其下方的操作按钮重叠

python - 合并没有匹配列的数据框

html - CSS 列高滚动

r - data.table:如何根据包含列名的分组唯一行值更改列值

python - 当单元格内容是列表时从单元格中删除元素

javascript - 来自一个 <ul>、CSS 和一些 JS 的多个列列表

r - 如何使用 annotation_custom() 在绘图区域的精确区域放置 grobs?

r - 从 df 中删除包含相同字符串的字符向量

r - 更改我的 ggplot 树状图中的字体

python - 获取索引范围内行的最大值