【问题标题】:collapse multiple rows of a dataframe into single row based on unique id in r [duplicate]根据r中的唯一ID将数据帧的多行折叠成单行[重复]
【发布时间】:2017-11-14 05:44:51
【问题描述】:

我有一个包含数百万行的数据集。第一行有一个 ID,尽管数据集中有重复的 ID(所有 ID 都经过分组和排序)。数据集有多个列。我想转换数据,使得每个 ID 有一个行项,并且该 ID 列的所有先前条目按顺序放入一行中。

查看之前数据的示例 sn-p

以及我希望数据看起来如何的示例

这是一个非常相似的问题的示例,但是在这个问题中,数据只有两列(一列用于 ID),但我的数据有超过 5 列(一列用于 ID):Collapse mutiple rows of a dataframe into one row - based on a unique key

我想在 R 或 Excel 中执行此操作 :)

【问题讨论】:

    标签: r database excel


    【解决方案1】:

    R 中,我们可以使用来自data.tabledcast 执行此操作

    library(data.table)
    dcast(setDT(df1), ID ~ rowid(ID), value.var = c("V1", "V2"), fill = "")
    #   ID V1_1 V1_2 V1_3 V2_1 V2_2 V2_3
    #1:  1    a    b    c   aa   bb   cc
    #2:  2    d    e        dd   ee     
    #3:  3    f             ff          
    

    数据

    df1 <- structure(list(ID = c(1, 1, 1, 2, 2, 3), V1 = c("a", "b", "c", 
     "d", "e", "f"), V2 = c("aa", "bb", "cc", "dd", "ee", "ff")), .Names = c("ID", 
    "V1", "V2"), row.names = c(NA, -6L), class = "data.frame")
    

    【讨论】:

    • 谢谢,效果很好。但是,当我第二天尝试使用相同的代码再次运行它时(我在前一天晚上保存了代码),我收到了一个错误,上面写着:Error in .subset2(x, i, exact = exact) :下标超出范围另外:警告消息:在 if (!(value.var %in% names(data))) { : 条件长度 > 1 并且只使用第一个元素
    • @user5211911 可以根据post上的数据试试吗
    • 是的,即使我使用您帖子中的数据也是如此。我将您帖子中的数据复制粘贴到 R 中,但它不起作用并给了我同样的错误。虽然这很奇怪,因为我第一次尝试时它有效,但现在它不起作用
    • 好吧,我刚刚打开又关闭了我的电脑,代码现在可以工作了……很奇怪
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-10
    • 1970-01-01
    • 2023-03-14
    • 1970-01-01
    相关资源
    最近更新 更多