【问题标题】:R: How to turn the values in a column into the number of rows?R:如何将列中的值转换为行数?
【发布时间】:2020-03-25 22:43:28
【问题描述】:

我怎么转 this data frame 变成一个看起来像这样的table。其中列数等于月列中的可用值,行数等于可用年数。谢谢。

【问题讨论】:

  • 请查看如何发布reproduicble example。您可以复制您的数据,以便我们使用dput。请勿发布图片 - 我们无法从中复制粘贴,并且它们无法与屏幕阅读器一起使用

标签: r csv dataframe datatables transpose


【解决方案1】:

基本的 R 方法不太优雅,但这里有一种方法。

Result <- reshape(NYHSpot,direction = "wide",idvar="Year", timevar = "Month")
colnames(Result)[2:13] <- month.abb
Result
   Year   Jan   Feb   Mar   Apr   May   Jun   Jul   Aug   Sep   Oct   Nov   Dec
1  1986 0.420 0.340 0.460 0.420 0.410 0.411 0.434    NA    NA    NA    NA    NA
8  1987 0.557 0.556 0.523 0.518 0.541 0.516 0.454 0.489 0.474 0.509 0.504 0.542
20 1988    NA    NA    NA    NA    NA    NA    NA 0.449 0.461 0.452    NA    NA

数据

NYHSpot <- structure(list(i..Spot.Price = c(0.42, 0.34, 0.46, 0.42, 0.41, 
0.411, 0.434, 0.489, 0.474, 0.509, 0.504, 0.542, 0.557, 0.556, 
0.523, 0.518, 0.541, 0.516, 0.454, 0.449, 0.461, 0.452), Month = c(6L, 
7L, 8L, 9L, 10L, 11L, 12L, 1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 
10L, 11L, 12L, 1L, 2L, 3L), Year = c(1986, 1986, 1986, 1986, 
1986, 1986, 1986, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 
1987, 1987, 1987, 1987, 1988, 1988, 1988)), class = "data.frame", row.names = c(NA, 
-22L))

【讨论】:

    【解决方案2】:

    试试这个:

    如果你没有安装tidyr包,请先安装

    install.packages("tidyr")
    

    然后下面的代码会做你想做的事

    library(tidyr)
    
    # sample data
    DF <- data.frame(Price = c(42,34,42,45,54,60), 
                     Month = c(1,2,3,1,2,3), 
                     Year = c(2000,2000,2000,2001,2001,2001))
    
    DF %>%
      mutate(Month = month.abb[Month]) %>%
      pivot_wider(names_from = Month, values_from = Price)
    

    结果:

       Year   Jan   Feb   Mar
      <dbl> <dbl> <dbl> <dbl>
    1  2000    42    34    42
    2  2001    45    54    60
    

    PS:下次请在可复制的例子中提问。 This link求灵感

    【讨论】:

      猜你喜欢
      • 2011-07-12
      • 1970-01-01
      • 2018-02-21
      • 2022-06-28
      • 2021-01-28
      • 2015-04-25
      • 1970-01-01
      • 1970-01-01
      • 2022-01-10
      相关资源
      最近更新 更多