我用一列创建了一个data.table。此列代表我可能会获取以下数据的汽车的名称:
mydata <-mtcars[1:10,]
setDT(mydata, keep.rownames = TRUE)
mydataBase <- data.table (rn = mydata$rn,
mpg = as.numeric(),
cyl = as.numeric(),
disp = as.numeric(),
hp = as.numeric(),
drat = as.numeric(),
wt = as.numeric(),
qsec = as.numeric(),
vs = as.numeric(),
am = as.numeric(),
gear = as.numeric(),
carb = as.numeric())
There were 11 warnings (use warnings() to see them)
mydataBase
rn mpg cyl disp hp drat wt qsec vs am gear carb
1: Mazda RX4 NA NA NA NA NA NA NA NA NA NA NA
2: Mazda RX4 Wag NA NA NA NA NA NA NA NA NA NA NA
3: Datsun 710 NA NA NA NA NA NA NA NA NA NA NA
4: Hornet 4 Drive NA NA NA NA NA NA NA NA NA NA NA
5: Hornet Sportabout NA NA NA NA NA NA NA NA NA NA NA
6: Valiant NA NA NA NA NA NA NA NA NA NA NA
7: Duster 360 NA NA NA NA NA NA NA NA NA NA NA
8: Merc 240D NA NA NA NA NA NA NA NA NA NA NA
9: Merc 230 NA NA NA NA NA NA NA NA NA NA NA
10: Merc 280 NA NA NA NA NA NA NA NA NA NA NA
然后我运行一系列复杂的功能。每次运行此功能的结果都会为我提供有关一辆汽车的信息。我希望将此信息附加到已经存在的表mydataBase
function(){
# complicated calculations
return(car1)
}
每次运行函数时,都会以以下格式保存计算:
car1 <- mydata[2,]
car1
rn mpg cyl disp hp drat wt qsec vs am gear carb
1: Mazda RX4 Wag 21 6 160 110 3.9 2.875 17.02 0 1 4 4
所以我正在寻找一种方法来填充表格,以使rn
匹配并且不产生新的列?
理想的结果:
rn mpg cyl disp hp drat wt qsec vs am gear carb
1: Datsun 710 NA NA NA NA NA NA NA NA NA NA NA
2: Duster 360 NA NA NA NA NA NA NA NA NA NA NA
3: Hornet 4 Drive NA NA NA NA NA NA NA NA NA NA NA
4: Hornet Sportabout NA NA NA NA NA NA NA NA NA NA NA
5: Mazda RX4 NA NA NA NA NA NA NA NA NA NA NA
6: Mazda RX4 Wag 21 6 160 110 3.9 2.875 17.02 0 1 4 4
7: Merc 230 NA NA NA NA NA NA NA NA NA NA NA
8: Merc 240D NA NA NA NA NA NA NA NA NA NA NA
9: Merc 280 NA NA NA NA NA NA NA NA NA NA NA
10: Valiant NA NA NA NA NA NA NA NA NA NA NA
该功能会重复多次,从而在每次运行中都会计算出一辆不同的汽车。到该过程结束时,几乎所有汽车都会有可用数据。
我尝试使用合并,但是会创建多余的列。有什么想法吗?
答案 0 :(得分:2)
我们可以使用match
获取要更新的行号,并使用set
来更新行。
library(data.table)
mydata <- mtcars[1:10,]
setDT(mydata, keep.rownames = TRUE)
mydataBase <- data.table(rn = mydata$rn,mpg = NA_real_,cyl = NA_real_,
disp = NA_real_,hp = NA_real_,drat = NA_real_,
wt = NA_real_,qsec = NA_real_,vs = NA_real_,
am = NA_real_,gear = NA_real_,carb = NA_real_)
car1 <- mydata[2,]
set(mydataBase, match(car1$rn, mydataBase$rn),
names(mydataBase)[-1], as.list(car1[, -1]))
mydataBase
# rn mpg cyl disp hp drat wt qsec vs am gear carb
# 1: Mazda RX4 NA NA NA NA NA NA NA NA NA NA NA
# 2: Mazda RX4 Wag 21 6 160 110 3.9 2.875 17.02 0 1 4 4
# 3: Datsun 710 NA NA NA NA NA NA NA NA NA NA NA
# 4: Hornet 4 Drive NA NA NA NA NA NA NA NA NA NA NA
# 5: Hornet Sportabout NA NA NA NA NA NA NA NA NA NA NA
# 6: Valiant NA NA NA NA NA NA NA NA NA NA NA
# 7: Duster 360 NA NA NA NA NA NA NA NA NA NA NA
# 8: Merc 240D NA NA NA NA NA NA NA NA NA NA NA
# 9: Merc 230 NA NA NA NA NA NA NA NA NA NA NA
#10: Merc 280 NA NA NA NA NA NA NA NA NA NA NA