我想创建一个新列,报告报告的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)
Run Code Online (Sandbox Code Playgroud)
这样做的任何方式?
我们可以使用data.table同zoo.将'data.frame'转换为'data.table'(setDT(df1)),使用'col1'值指定一个新列'col2',将'0'的元素更改为'0' NA然后用于na.locf将NA元素替换为以"ID"分组的先前非NA元素.
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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
62 次 |
| 最近记录: |