【问题标题】:Taking columns names, splitting them and melting them into a dataframe取列名,拆分它们并将它们融合到数据框中
【发布时间】:2020-11-04 20:41:14
【问题描述】:

我有一个跨越 20 年的住房价值数据框架。列名是月份和年份,即04-1996, 05-1996, 06-1996 等等。我想绘制那些月份和年份的时间序列数据,并且必须获取这些列名并将它们绘制到结果数据框中。

我试过这个来测试一下:

df2<-melt(df, na.rm=T, id.vars=c("RegionName","CountyName"), measure.vars=c("04-1996", "05-1996", "06-1996"))

它给了我相应行中的年份等,这很好。我很接近。

我目前有:

    Region  City      Apr-1996 May-1996  June-1996
1   10025   New York  10000    10000     10000
2   10023   New York  10000    10000     10000
3   10128   New York  10000    10000     10000

一直到 2015 年 5 月。

理想情况下,我会喜欢这样的东西:

    Region  City      Month Year    Value
1   10025   New York  04    1996    123100
2   10023   New York  05    1997    72700
3   10128   New York  06    1998    91600

当我尝试将 id.vars 添加到我的熔体中时,我看到错误提示 Error: id variables not found in data: Month-Year。

但是当我去创建一个 for 循环来遍历所有列名时,它会给我带来错误。任何方向都会很棒。

【问题讨论】:

  • 请提供示例数据:dput(head(mydata))
  • “给我错误。” - 分享您的代码和错误消息。
  • 抱歉,我现在要编辑了
  • 可以显示与您想要的输出相对应的示例输入吗?我们需要知道你从什么开始。请使用dput(),以便保留类结构信息并且可以复制/粘贴。

标签: r strsplit


【解决方案1】:

以下是我对您数据的理解中的一个示例:

library(dplyr)
lirary(tidyr)

tb <- tibble(Region = c(10025, 10023),
       City = c("New York","New York"),
       `04-1996` = c(10, 20),
       `05-1996` = c(20, 30))

结果:

# A tibble: 2 x 4
  Region City     `04-1996` `05-1996`
   <dbl> <chr>        <dbl>     <dbl>
1  10025 New York        10        20
2  10023 New York        20        30

计算:

tb %>% 
  tidyr::pivot_longer(-c(Region, City), names_to = "M-Y", values_to = "Value") %>% 
  tidyr::separate("M-Y", into = c("Month", "Year"), sep = "-")

结果:

  Region City     Month Year  Value
   <dbl> <chr>    <chr> <chr> <dbl>
1  10025 New York 04    1996     10
2  10025 New York 05    1996     20
3  10023 New York 04    1996     20
4  10023 New York 05    1996     30

【讨论】:

  • 谢谢!!这正是我想要的。
猜你喜欢
  • 2018-02-17
  • 2016-01-05
  • 2012-09-25
  • 2015-03-31
  • 1970-01-01
  • 2020-04-23
  • 2019-09-20
  • 2012-05-23
  • 2018-05-01
相关资源
最近更新 更多