R:如何将单个列中包含的数据整理成单独的列?

时间:2016-08-23 12:41:53

标签: r dplyr tidyr

我的数据框架不整洁:

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

2 个答案:

答案 0 :(得分:2)

我们可以使用separate/spread中的tidyrseparate将“信息”列拆分为两列,然后使用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))

答案 1 :(得分:0)

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

我们假设我们有一个数据框df,其中包含&#39; id&#39;,&#39; date&#39;,&#39;元素&#39;和& #39;测量&#39;:

<强> DF

id  date        element measurement

01  2018-02-06  tmax    55

01  2018-02-06  tmin    51

这个数据框不整齐,因为同一个id&#39; 01&#39;有2行,我们应该只有1行。我们可以使用&#39; spread&#39;传播价值观&#39; tmax&#39;和&#39; tmin&#39;跨列。

df%&gt;%spread(key = element,value = measurement)

id  date        tmax tmin

01  2018-02-06  55    51