【问题标题】:Converting rows to columns for a dataframe in R [duplicate]将R中数据框的行转换为列[重复]
【发布时间】:2017-08-16 10:14:03
【问题描述】:

我有一个如下的数据框。

Date         Time      Object_Name    Object_Value
7/28/2017    8:00      A1             58.56
7/28/2017    8:00      A2             51.66
.
.
.
7/28/2017    8:30      A1             60.2
7/28/2017    8:30      A2             65.2

我需要这样改造:

Date         Time     A1       A2 
7/28/2017    8:00     58.5     51.6
7/28/2017    8:30     60.2     65.2

【问题讨论】:

    标签: r dataframe reshape transpose


    【解决方案1】:

    试试

    library(reshape2)
    df
           Date Time Object_Name Object_Value
    1 7/28/2017 8:00          A1        58.56
    2 7/28/2017 8:00          A2        51.66
    3 7/28/2017 8:30          A1        60.20
    4 7/28/2017 8:30          A2        65.20
    
    dcast(df, Date + Time ~ Object_Name)
    
           Date Time    A1    A2
    1 7/28/2017 8:00 58.56 51.66
    2 7/28/2017 8:30 60.20 65.20
    

    或者,

    library(tidyr)
    spread(df, Object_Name, Object_Value)
           Date Time    A1    A2
    1 7/28/2017 8:00 58.56 51.66
    2 7/28/2017 8:30 60.20 65.20
    

    为了解决评论,如果您有特殊情况,上述方法效果很好。例如,考虑以下内容:

    df
           Date Time Object_Name Object_Value
    1 7/28/2017 8:00          A1        58.56
    2 7/28/2017 8:00          A1        50.00
    3 7/28/2017 8:00          A2        51.66
    4 7/28/2017 8:30          A1        60.20
    5 7/28/2017 8:30          A2        65.20
    

    查看前两行,您可以看到对于相同的日期、时间和 Object_Name,我们有两个值。这意味着dcast 不知道该做什么并给出以下警告:Aggregation function missing: defaulting to length。我们可以通过指定聚合函数来处理这个问题。例如,让我们取这些值的平均值:

    dcast(df, Date + Time ~ Object_Name, fun.aggregate = mean)
           Date Time    A1    A2
    1 7/28/2017 8:00 54.28 51.66
    2 7/28/2017 8:30 60.20 65.20
    

    【讨论】:

    • 我得到的值为 0 和 1,我应该明确指定 object_Value 吗?
    • 警告:缺少聚合函数:默认为长度。所有的值都是0和1
    • 请投反对票的人能解释一下投反对票吗?
    • 我希望每个对象名称的每个值都有各自的日期和时间。在我的数据框中,我每隔 15 分钟就有 218 个唯一值(对象名称)。因此,从 2017 年 6 月 6 日到 2017 年 7 月 1 日,我每 15 分钟需要这 218 个对象名称的对象值。
    • 是的,但我不想刻薄。对于 218 个唯一对象名称中的每一个,我对每个日期和时间都有不同的值。正如我上面解释的那样。
    猜你喜欢
    • 2016-07-24
    • 1970-01-01
    • 1970-01-01
    • 2018-03-05
    • 2016-09-19
    • 2020-07-14
    • 1970-01-01
    • 1970-01-01
    • 2022-01-10
    相关资源
    最近更新 更多