【发布时间】:2019-06-12 07:44:09
【问题描述】:
对于“响应”列的每一行,我想检查它下面的 5 行是否具有“响应”值(即没有 NA),如果是,那么我想计算平均值和标准差在下面的 5 行中。如果以下 5 行中的任何行缺少“响应”值(即 NA),则最终输出应为“NA”(因为我希望计算 n=5 点/值的均值和标准差)。
Input.data 的示例如下所示:
Response
NA
1
2
3
NA
1
1
2
3
4
5
这是我尝试过的代码,但没有给出正确的解决方案:
Input.data$count.lag <- rollapplyr(Input.data[,c("Response")],list(-(4:0)),length, fill=NA)
Input.data$stdev <- ifelse(Input.data$count.lag <5, "NA",
rollapplyr(Input.data[,c("Response")],list(-(4:0)),sd,fill=NA))
Input.data$mean <- ifelse(Input.data$count.lag <5, "NA",
rollapplyr(Input.data[,c("Response")],list(-(4:0)),mean,fill=NA))
它给出了以下内容,这不是我想要的:
Response count.lag stdev mean
NA NA NA NA
1 NA NA NA
2 NA NA NA
3 NA NA NA
NA 5 NA NA
1 5 NA NA
1 5 NA NA
2 5 NA NA
3 5 NA NA
4 5 1.303840 2.2
5 5 1.581139 3.0
输出应该是这样的:
Response count.lag stdev mean
NA 4 NA NA
1 4 NA NA
2 4 NA NA
3 4 NA NA
NA 5 1.303840 2.2
1 5 1.581139 3.0
1 5 1.581139 4.0
2 5 1.581139 5.0
3 5 1.581139 6.0
4 5 1.581139 7.0
5 5 1.581139 8.0
有人可以建议错误在哪里和/或可行的替代解决方案吗?谢谢!
【问题讨论】:
-
看函数
shift
标签: r list data.table string-length rollapply