【问题标题】:tidying data: grouping values and keeping dates整理数据:分组值和保持日期
【发布时间】:2017-01-27 10:53:10
【问题描述】:

我从 dplyr / tidyr 包开始,用于数据操作和重塑。

city <- c("Brest", "Brest", "Rennes", "Rennes", "Rennes") 
year<- c(2014, 2015, 2013, 2012, 2016) 
values <- c(100, 100, 110, 95, 95) 

# Création du data.frame
dataset <- data.frame(city, year, values)  
dataset

这是我的数据集:

city    year    value
Brest   2014    100     
Brest   2015    100     
Rennes  2013    110     
Rennes  2012    95      
Rennes  2016    95  

我在做什么:

demo <- dataset %>%
    count(city, values) %>%
    arrange(city)

...和我的结果:

 city   value  n. of obs
 Brest  100     2       
 Rennes 95      2       
 Rennes 110     1   

我期望拥有的:

第一个选项:

  city   value  n. of obs      year
  Brest     100     2          2014, 2015
  Rennes    95      2          2012, 2016
  Rennes    110     1          2013

第二个选项:

  city   value  n. of obs   year1    year 2
  Brest     100     2       2014     2015
  Rennes    95      2       2012     2016
  Rennes    110     1       2013

我可以通过向我的管道添加 mutate 来做到这一点吗?

感谢您的帮助

【问题讨论】:

  • 以 R 为基数,aggregate(year~city + values, dataset, function(x) c(year = toString(x), numberOfObs = length(x)))

标签: r dplyr tidyr


【解决方案1】:

我们可以按操作进行分组,然后 summarise 通过 paste将“年份”放在一起(toString 是 paste(..., collapse=", ") 的包装器)

dataset %>%
      group_by(city, values) %>%
      summarise(n = n(), year = toString(year))

或者如果我们想要第二个选项,在分组操作之后,通过paste创建行数(n())和一个序列列,使用row_number()创建一个字符串“年”,然后执行spread 将其转换为“宽”格式

dataset %>% 
     group_by(city, values) %>% 
     mutate(n = n(), i1 = paste0("year", row_number()))  %>%
     spread(i1, year)

【讨论】:

  • 效果很好,但不完全理解i1 = paste0("year", row_number())) %&gt;% spread(i1, year)
  • @Wilcar 我更新了帖子。它只是创建一个序列列,以便 spread 处理的行将是唯一的
猜你喜欢
  • 2020-03-02
  • 2019-03-14
  • 2013-09-05
  • 1970-01-01
  • 2020-10-22
  • 2021-03-09
  • 1970-01-01
  • 1970-01-01
  • 2019-08-22
相关资源
最近更新 更多