我想创建一个新列,报告报告的col1值大于零,直到遇到新的col1值大于零为止(请参阅df2中的col2)。即col1中的零值被大于零的观测值所代替。
ID = c(1,1,1,1,1,1,1,1,2,2,2,2)
col1 = c(500,0,0,0,600,0,0,0,450,0,0,0)
df1 = data.frame(ID,col1)
ID = c(1,1,1,1,1,1,1,1,2,2,2,2)
col1 = c(500,0,0,0,600,0,0,0,450,0,0,0)
col2 = c(500,500,500,500,600,600,600,600,450,450,450,450)
df2 = data.frame(ID,col1,col2)
有什么办法吗?
我们可以使用data.table
同zoo
。将'data.frame'转换为'data.table'(setDT(df1)
),为新列'col2'分配'col1'的值,将'0'的元素更改为NA
,然后使用na.locf
替换NA元素以前的非NA元素按“ ID”分组。
library(zoo)
library(data.table)
setDT(df1)[, col2:=col1][col2==0, col2:= NA]
df1[,col2:= na.locf(col2) ,ID]
df1
# ID col1 col2
# 1: 1 500 500
# 2: 1 0 500
# 3: 1 0 500
# 4: 1 0 500
# 5: 1 600 600
# 6: 1 0 600
# 7: 1 0 600
# 8: 1 0 600
# 9: 2 450 450
#10: 2 0 450
#11: 2 0 450
#12: 2 0 450
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句