【问题标题】:wide to long and col name into row name宽到长和列名到行名
【发布时间】:2020-11-03 01:34:37
【问题描述】:

我有一张这样的表:

  v1 <- c("A","B","C")
  v2 <- c("E","G","")
  v3 <- c("B","C","D")
  df1 <- data.frame(v1,v2,v3)

我想把它改成

我该怎么办。如果可能,请给我多种方式。谢谢。

【问题讨论】:

  • 对不起,我刚刚更新了预期输出部分的帖子。我试过out2_long&lt;-gather(df1,value),我确定这是错误的。 :(

标签: r reshape


【解决方案1】:

您可以获取长格式的数据,然后删除空白值。

library(dplyr)
library(tidyr)

gather(df1, variable, value) %>% filter(value != '')

#  variable value
#1       v1     A
#2       v1     B
#3       v1     C
#4       v2     E
#5       v2     G
#6       v3     B
#7       v3     C
#8       v3     D

但是,gather 已停用并由 pivot_longer 本身取代。

pivot_longer(df1, cols = everything(), names_to = 'variable') %>%
    filter(value != '')

您也可以为此使用data.table

library(data.table)
melt(setDT(df1), measure.vars = names(df1))[value != '']

【讨论】:

    【解决方案2】:

    您可以使用内置函数t()进行转置

    df2 <- data.frame(t(df1))
    colnames(df2) <- row.names(df1)
    
    df2
       1 2 3
    v1 A B C
    v2 E G  
    v3 B C D
    

    【讨论】:

    • 抱歉,我发布了错误的预期结果图片。我刚刚更新了问题。
    猜你喜欢
    • 1970-01-01
    • 2020-07-10
    • 1970-01-01
    • 1970-01-01
    • 2019-11-18
    • 2023-02-07
    • 2016-08-29
    • 1970-01-01
    • 2021-04-30
    相关资源
    最近更新 更多