我有我需要做计算的列中的数据。是否有可能使用以前的行值而不使用循环?例如。如果在第一列中的值是139,那么计算最后5个值的中值以及上面5行的值和当前行中的值的百分比变化?使用先前行值无列循环的列计算
ID Data PF
135 5 123
136 4 141
137 5 124
138 6 200
139 1 310
140 2 141
141 4 141
所以这里这个数据集,你会怎么做:
- 在
Data
查找139
在ID
列 - 最后5行返回平均值(给出
4.2
)值的 - 回报表现
PF
5行以上到当前值(给出152%
)
如果我会做一个循环,它看起来是这样的:
for (i in 1:nrow(data)){
if(data$ID == "139" & i>=3)
{data$New_column <- data[i,"PF"]/data[i-4,"PF"] - 1
}
的问题是,环路采用因太长许多数据点。 ID 139将在数据集中出现好几次。
非常感谢。 Carlos
请添加一个可重现的示例和预期输出。 – Sotos
查看'zoo'包中的'rollapply'。 – Tutuchan
您能否定义您在性能上高于当前值的PF 5行中的值?它的意思是?它的中位数?在任何情况下,你都不会有139行以上的5行,只是4. – aichao