【问题标题】:Combine columns that have the same row values but are spread out合并具有相同行值但分散的列
【发布时间】:2018-02-22 01:13:11
【问题描述】:

我想根据“日期”中的值组合这些列,以便只有日期的唯一值与相应的年龄组合并。这是在tidyr 中使用spread() 的结果。如果您查看 Date 的值是否重复

dput(dataframe) 读取 ....

structure(list(Date = c("201740", "201740", "201740", "201740", 
"201741", "201741", "201741", "201741", "201742", "201742", "201742", 
"201742", "201743", "201743", "201743", "201743", "201743", "201743", 
"201744", "201744", "201744", "201744", "201744", "201744", "201745", 
"201745", "201745", "201745", "201745", "201745", "201746", "201746", 
"201746", "201746", "201746", "201746", "201747", "201747", "201747", 
"201747", "201747", "201747", "201748", "201748", "201748", "201748", 
"201748", "201748", "201749", "201749", "201749", "201749", "201749", 
"201749", "201750", "201750", "201750", "201750", "201750", "201750", 
"201751", "201751", "201751", "201751", "201751", "201751", "201752", 
"201752", "201752", "201752", "201752", "201752", "201801", "201801", 
"201801", "201801", "201801", "201801", "201802", "201802", "201802", 
"201802", "201802", "201802", "201803", "201803", "201803", "201803", 
"201803", "201803", "201804", "201804", "201804", "201804", "201804", 
"201804", "201805"), `0-4 yr` = c(NA, 0.1, NA, NA, NA, 0.2, NA, 
NA, NA, 0.2, NA, NA, NA, NA, 0.3, NA, NA, NA, NA, NA, 0.6, NA, 
NA, NA, NA, NA, 0.7, NA, NA, NA, NA, NA, 1, NA, NA, NA, NA, NA, 
1.8, NA, NA, NA, NA, NA, 2.7, NA, NA, NA, NA, NA, 3.3, NA, NA, 
NA, NA, NA, 5.2, NA, NA, NA, NA, NA, 7.9, NA, NA, NA, NA, NA, 
13.7, NA, NA, NA, NA, NA, 18.3, NA, NA, NA, NA, NA, 23.3, NA, 
NA, NA, NA, NA, 28.2, NA, NA, NA, NA, NA, 35.6, NA, NA, NA, 41.9
), `18-49 yr` = c(NA, 0.1, NA, NA, 0.1, NA, NA, NA, NA, 0.2, 
NA, NA, NA, 0.2, NA, NA, NA, NA, NA, 0.4, NA, NA, NA, NA, NA, 
0.5, NA, NA, NA, NA, NA, 0.7, NA, NA, NA, NA, NA, 1, NA, NA, 
NA, NA, NA, 1.4, NA, NA, NA, NA, NA, 1.9, NA, NA, NA, NA, NA, 
2.7, NA, NA, NA, NA, NA, 4.2, NA, NA, NA, NA, NA, 6.6, NA, NA, 
NA, NA, NA, 9.3, NA, NA, NA, NA, NA, 12.5, NA, NA, NA, NA, NA, 
15.2, NA, NA, NA, NA, NA, 17.7, NA, NA, NA, NA, NA), `5-17 yr` = c(0, 
NA, NA, NA, 0.1, NA, NA, NA, 0.1, NA, NA, NA, 0.1, NA, NA, NA, 
NA, NA, 0.2, NA, NA, NA, NA, NA, 0.3, NA, NA, NA, NA, NA, 0.5, 
NA, NA, NA, NA, NA, 0.7, NA, NA, NA, NA, NA, 0.9, NA, NA, NA, 
NA, NA, 1.2, NA, NA, NA, NA, NA, 1.7, NA, NA, NA, NA, NA, 2.5, 
NA, NA, NA, NA, NA, 3.5, NA, NA, NA, NA, NA, 4.3, NA, NA, NA, 
NA, NA, 5.9, NA, NA, NA, NA, NA, 7.3, NA, NA, NA, NA, NA, 9, 
NA, NA, NA, NA, NA, NA), `50-64 yr` = c(NA, NA, 0.2, NA, NA, 
NA, 0.3, NA, NA, NA, 0.5, NA, NA, NA, NA, NA, 0.8, NA, NA, NA, 
NA, NA, 1.1, NA, NA, NA, NA, NA, 1.6, NA, NA, NA, NA, NA, 2.2, 
NA, NA, NA, NA, NA, 3.1, NA, NA, NA, NA, 4.1, NA, NA, NA, NA, 
NA, 5.4, NA, NA, NA, NA, NA, NA, 8.1, NA, NA, NA, NA, NA, 13.7, 
NA, NA, NA, NA, 21.7, NA, NA, NA, NA, NA, NA, 32.6, NA, NA, NA, 
NA, NA, 42.9, NA, NA, NA, NA, NA, 52, NA, NA, NA, NA, NA, 60.2, 
NA, NA), `65+ yr` = c(NA, NA, NA, 0.5, NA, NA, NA, 1, NA, NA, 
NA, 2.1, NA, NA, NA, NA, NA, 3, NA, NA, NA, NA, NA, 3.9, NA, 
NA, NA, NA, NA, 5.1, NA, NA, NA, NA, NA, 6.5, NA, NA, NA, NA, 
NA, 9.2, NA, NA, NA, NA, NA, 14.3, NA, NA, NA, NA, NA, 20.5, 
NA, NA, NA, NA, NA, 30.2, NA, NA, NA, NA, NA, 50.2, NA, NA, NA, 
NA, NA, 90.1, NA, NA, NA, NA, NA, 137.9, NA, NA, NA, NA, NA, 
179.5, NA, NA, NA, NA, NA, 217.4, NA, NA, NA, NA, NA, 251.8, 
NA)), .Names = c("Date", "0-4 yr", "18-49 yr", "5-17 yr", "50-64 yr", 
"65+ yr"), class = "data.frame", row.names = c(NA, 97L))

【问题讨论】:

  • 以什么方式结合?你为什么开始传播?您能否发布您开始使用的原始数据,然后发布您希望数据的样子。不要张贴图片,这没有帮助。使用dput(dataframe) 发布您的数据
  • 详细说明如何创建数据框的代码对于数据框的补充将非常有帮助。我建议阅读本指南以生成可重现的示例以获取更多信息:stackoverflow.com/questions/5963269/…
  • 我使用了 spread() ,因为最初年龄组都在一个列中,我希望它们在自己的单独列中。传播之后就变成了这种奇怪的情况

标签: r


【解决方案1】:

可以尝试聚合,这可以在您传播之前完成。但在工作之后也是如此

library(tidyverse)
dataframe %>%
    group_by(Date) %>%
    summarise_all(funs(sum(., na.rm = T)))

我在这里使用了sum(),因为它不清楚你想如何总结。

更合适的方式可能是:

dataframe %>%
    gather("age_group", "value", -Date) %>%
    filter(!is.na(value)) %>%
    spread(age_group, value)

我们收集数据的地方可能是您的原始输入,这需要过滤然后重新传播

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-10-17
    • 1970-01-01
    • 2021-12-13
    • 2023-03-15
    • 2017-01-08
    • 1970-01-01
    • 1970-01-01
    • 2020-01-02
    相关资源
    最近更新 更多