PLZ帮助我如何编码以从数据中得到结果。我有一个包含超过1000000行的数据框,其中包含非连续的NA。我想将TA_DAY列拆分成这样:" 1~5,5~10 ....继续......结束"直到最后一排,并将它们组合成下面的那个...有没有人有想法或提示?哪个功能?我应该用它吗?非常感谢你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
.
.
答案 0 :(得分: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))
答案 1 :(得分:0)
由于描述与样本输出似乎不一致,我对所需内容并不完全清楚。我假设除了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