如何将缺失行和内插值添加到 R 中的数据框?
How do I add missing rows AND interpolated value to a data frame in R?
我有一个 table 这样的数据:
dat <- data.frame(
age = c(0,10,20,40,70,100),
surv = c(1.0,0.9,0.8,0.6,0.3,0.0)
)
我想为每个缺失的年龄 (30,50,60,80,90) 添加一行,然后我想将 surv 的线性插值添加到新行。所以新行将是 (30,0.7) (80, 0.2) 等等
这只是一个例子。我实际上正在处理一个更大的数据集,从 0 到 5,000,000 x 10(有很多缺失的行)所以我需要一些自动化。
感谢您的帮助!
这是一种快速 "dirty" 添加行的方法。虽然这不会按顺序插入年龄,但您可以稍后进行排序并替换之前缺失的行的值。
代码如下:
df <- data.frame(age=c(0,10,20,40,70,100), surv=c(1.0,0.9,0.8,0.6,0.3,0.0))
addrow <- c(30,50,60,80,90)
df_save <- df
i = 1
for (r in c(1:nrow(df) )) {
if (addrow[i] %in% df[,1] ) {
print(paste("TRUE", , sep=":"))
} else {
if (i <= length(addrow) ) {
newrow <- c(addrow[i], 999)
df <- rbind(df[1:r,], newrow, df[(r+1):nrow(df),])
}
}
i = i+1
}
df[order[df$age],)
然后将 999 值替换为相应年龄的生存值。
这是为了让您了解如何自动进行行绑定。
制作主数据集然后使用approx
进行线性插值:
newdat <- merge(data.frame(age=seq(0,100,10)),dat,all=TRUE)
newdat$surv[is.na(newdat$surv)] <-
with(newdat, approx(age, surv, xout=age)$y)[is.na(newdat$surv)]
newdat
# age surv
#1 0 1.0
#2 10 0.9
#3 20 0.8
#4 30 0.7
#5 40 0.6
#6 50 0.5
#7 60 0.4
#8 70 0.3
#9 80 0.2
#10 90 0.1
#11 100 0.0
我有一个 table 这样的数据:
dat <- data.frame(
age = c(0,10,20,40,70,100),
surv = c(1.0,0.9,0.8,0.6,0.3,0.0)
)
我想为每个缺失的年龄 (30,50,60,80,90) 添加一行,然后我想将 surv 的线性插值添加到新行。所以新行将是 (30,0.7) (80, 0.2) 等等
这只是一个例子。我实际上正在处理一个更大的数据集,从 0 到 5,000,000 x 10(有很多缺失的行)所以我需要一些自动化。
感谢您的帮助!
这是一种快速 "dirty" 添加行的方法。虽然这不会按顺序插入年龄,但您可以稍后进行排序并替换之前缺失的行的值。
代码如下:
df <- data.frame(age=c(0,10,20,40,70,100), surv=c(1.0,0.9,0.8,0.6,0.3,0.0))
addrow <- c(30,50,60,80,90)
df_save <- df
i = 1
for (r in c(1:nrow(df) )) {
if (addrow[i] %in% df[,1] ) {
print(paste("TRUE", , sep=":"))
} else {
if (i <= length(addrow) ) {
newrow <- c(addrow[i], 999)
df <- rbind(df[1:r,], newrow, df[(r+1):nrow(df),])
}
}
i = i+1
}
df[order[df$age],)
然后将 999 值替换为相应年龄的生存值。
这是为了让您了解如何自动进行行绑定。
制作主数据集然后使用approx
进行线性插值:
newdat <- merge(data.frame(age=seq(0,100,10)),dat,all=TRUE)
newdat$surv[is.na(newdat$surv)] <-
with(newdat, approx(age, surv, xout=age)$y)[is.na(newdat$surv)]
newdat
# age surv
#1 0 1.0
#2 10 0.9
#3 20 0.8
#4 30 0.7
#5 40 0.6
#6 50 0.5
#7 60 0.4
#8 70 0.3
#9 80 0.2
#10 90 0.1
#11 100 0.0