【问题标题】:split a column into severals and covert them into one row in r将一列分成几列并将它们转换为r中的一行
【发布时间】:2014-09-23 15:21:54
【问题描述】:

请帮助我如何编写代码以从数据中获取以下结果。我有一个包含超过 1000000 行的数据框,其中包含不连续的 NA。我想将 TA_DAY 列拆分成这样:“1~5th,6~10th....continue..end”直到最后一行,然后像下面这样组合它们......有人有想法或提示吗?哪个功能?我应该使用它吗?提前非常感谢你 G-day...

for(i in 0:161){
  aa[i+1]<-melt(dt4$WSmax[1:12+(12*i)])
}

list <- unlist(aa, recursive = FALSE)
df <- do.call("rbind", aa)




 ID YEAR PRICE                                    this is the one that i need 
    --------------                                  -------------------                          
    A  2001 19.45                                   19.45 98.23 12.33
    A  2003 98.23                                    NA   77.4  32.33
    B  2009 12.33               =>           
    C  2001  NA
    C  2004 77.4
    D  1999 32.33
    .
    .

【问题讨论】:

  • 我评论了您之前的帖子,以使用 dput 显示数据集。阅读描述后不清楚1~5th,6~10th.. 在预期的输出中,您正在绑定 PRICE 1 和 4、2 和 5 等...
  • 感谢您的评论...我只是通过阅读您的评论了解了 dput 函数..
  • 没问题。 dput 输出是我粘贴在解决方案中的输出。

标签: r data.table sqldf subset


【解决方案1】:
 sapply(1:(nrow(dat)-3), function(i) dat$PRICE[c(i, i+3)])
 #      [,1]  [,2]  [,3]
 #[1,] 19.45 98.23 12.33
 #[2,]    NA 77.40 32.33

数据

dat <- structure(list(ID = c("A", "A", "B", "C", "C", "D"), YEAR = c(2001L, 
2003L, 2009L, 2001L, 2004L, 1999L), PRICE = c(19.45, 98.23, 12.33, 
NA, 77.4, 32.33)), .Names = c("ID", "YEAR", "PRICE"), class = "data.frame", row.names = c(NA, 
-6L))

【讨论】:

    【解决方案2】:

    我不完全清楚想要什么,因为描述似乎与示例输出不一致。我假设除了PRICE 之外的所有列都可以忽略,我们希望PRICE 的每个值以及它前面的3 个位置的值,因为这给出了显示的示例输出。在那种情况下,来自动物园的rollapply 可以做到。这里有两种不同的方式:

    library(zoo)
    
    t(rollapply(dat$PRICE, 4, function(x) c(x[1], x[4])))
    ##       [,1]  [,2]  [,3]
    ## [1,] 19.45 98.23 12.33
    ## [2,]    NA 77.40 32.33
    

    使用 rollapply 的另一种方法:

    t(rollapply(dat$PRICE, list(c(0, 3)), identity))
    ##       [,1]  [,2]  [,3]
    ## [1,] 19.45 98.23 12.33
    ## [2,]    NA 77.40 32.33
    

    【讨论】:

      猜你喜欢
      • 2014-01-13
      • 2019-01-14
      • 2023-02-14
      • 2016-01-05
      • 2020-02-07
      • 2018-09-19
      • 1970-01-01
      • 2021-10-29
      • 2020-08-18
      相关资源
      最近更新 更多