【问题标题】:appending elements to an existing table in R将元素附加到 R 中的现有表
【发布时间】:2021-01-01 23:25:35
【问题描述】:

我创建了一个包含一列的 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

该函数重复多次,从而在每次运行中计算出不同的汽车。到该过程结束时,几乎所有汽车都将获得可用数据。

我尝试使用合并,但创建了额外的列。有什么想法吗?

【问题讨论】:

  • 你能显示你调用这个函数的代码吗?您是否以某种形式的循环调用它?
  • 函数被多次调用,类似于循环。每次调用该函数时,都会计算汽车的值。我最初的想法是在函数内部“填充” mydataBase 表,并在环境中使用“
  • 但我仍然知道哪些值没有值,因为它们是 NA
  • 你能把所有的car 值填在一起吗?还是只能一一填写?
  • 我要一一填写

标签: r merge data.table


【解决方案1】:

我们可以使用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

【讨论】:

    猜你喜欢
    • 2015-12-31
    • 2021-12-26
    • 1970-01-01
    • 1970-01-01
    • 2014-06-10
    • 2014-06-27
    • 2020-04-03
    • 1970-01-01
    • 2012-09-10
    相关资源
    最近更新 更多