【问题标题】:R: How to tidy data contained in a single column into separate columns?R:如何将单列中包含的数据整理成单独的列?
【发布时间】:2016-08-23 12:41:52
【问题描述】:

我的数据框不整齐:

name   information
A      300 USD
A      70 kg
A      2 cm 
B      400 USD
B      90 kg
B      5 cm 

如何使用 dplyr、tidyr 和可能的其他软件包将“信息”列整理成单独的变量/列:USD、kg 和 cm?

这是所需的输出:

name   USD    kg    cm
A      300    70    2
B      400    90    5

【问题讨论】:

    标签: r dplyr tidyr


    【解决方案1】:

    我们可以从tidyr 使用separate/spreadseparate 将“信息”列分成两列,然后使用 spread 在将“单位”更改为 factor 类后将其重塑为“宽”格式(以防列的顺序很重要)。

    library(dplyr)
    library(tidyr)
    separate(df1, information, into = c("value", "unit")) %>% 
                   mutate(unit= factor(unit, levels =unique(unit))) %>%
                    spread(unit, value)
    #  name USD kg cm
    #1    A 300 70  2
    #2    B 400 90  5
    

    数据

    df1 <- structure(list(name = c("A", "A", "A", "B", "B", "B"), information = c("300 USD", 
    "70 kg", "2 cm", "400 USD", "90 kg", "5 cm")), .Names = c("name", 
    "information"), class = "data.frame", row.names = c(NA, -6L))
    

    【讨论】:

    • 谢谢@akrun!正是我想要的。
    【解决方案2】:

    这是另一个使用 tidyr 传播的示例:

    假设我们有一个数据框 df,其中包含 'id'、'date'、'element' 和 'measurement' 列:

    df

    id  date        element measurement
    
    01  2018-02-06  tmax    55
    
    01  2018-02-06  tmin    51
    

    这个数据框不整齐,因为同一个 id '01' 有 2 行,我们应该只有 1 行。我们可以使用 'spread' 将值 'tmax' 和 'tmin' 跨列分布。

    df %>% spread(key=element, value=measurement)

    id  date        tmax tmin
    
    01  2018-02-06  55    51
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-11-23
      • 1970-01-01
      • 2019-11-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-07-13
      相关资源
      最近更新 更多