【问题标题】:How to reshape a data frame with duplicate column names as rows? [duplicate]如何将具有重复列名的数据框重塑为行? [复制]
【发布时间】:2017-05-17 05:53:05
【问题描述】:

我有一个数据集(已从 .json 文件导入),目前看起来像这样:

ID <- c(1)
Name <- c("John")
Name.1 <- c("Irene")
Address <- c("1 Brick Lane")
Address.1 <- c("2 Wood Street")

df <- data.frame(ID, Name, Name.1, Address, Address.1)

ID     |  Name |   Address    | Name.1 | Address.1
------ | ------|   ------     | ------ | ------
1      | John  | 1 Brick Lane | Irene  | 2 Wood Street

但是,我想将其操作为如下所示:

ID <- c(1)
Name <- c("John", "Irene")
Address <- c("1 Brick Lane", "2 Wood Street")

df <- data.frame(ID, Name, Address)

ID     |  Name |   Address    
------ | ------|   ------     
1      | John  | 1 Brick Lane 
1      | Irene | 2 Wood Street

此外,并非所有人都有相同的信息字段。例如,John 的出生日期可能在数据中,但 Irene 的不在。

在我的真实数据集中,最终数据框中将有大约 30 个不同的列。您的帮助将不胜感激!

【问题讨论】:

    标签: r dataframe multiple-columns


    【解决方案1】:

    我们可以使用来自data.tablemelt,它可以采用多个measure 模式

    library(data.table)
    melt(setDT(df), measure = patterns("^Name", "^Address"),
          value.name = c("Name", "Address"))[, variable := NULL][]
    #   ID  Name       Address
    #1:  1  John  1 Brick Lane
    #2:  1 Irene 2 Wood Street
    

    【讨论】:

    • 谢谢。这适用于我的较小示例,但对于包含 50 多个变量的数据集,我现在收到一条错误消息“melt.data.table 中的错误(setDT(df),id = ID,:不支持的类型'NULL'” . 有谁知道为什么?我已经逐行运行它,似乎找不到问题。另外,有没有办法不按名称写出每个变量?特别是因为我的每个数据集可能有不同的变量名。
    • @nspoljar 不清楚错误。您能否用一个显示错误的小示例更新您的帖子
    • 我已经修复了错误并找出了问题的第二部分。不过非常感谢!
    猜你喜欢
    • 2023-02-09
    • 2012-10-09
    • 1970-01-01
    • 2019-09-09
    • 2022-12-05
    • 2020-11-16
    • 2015-06-11
    • 2016-12-11
    • 1970-01-01
    相关资源
    最近更新 更多