【问题标题】:How to populate/fill a dataframe column with cell values of another dataframe如何用另一个数据框的单元格值填充/填充数据框列
【发布时间】:2020-01-13 18:34:04
【问题描述】:

我有两个数据框

数据框 1 有大约百万行。它有两列名为“行”和“列”,具有另一个数据框(即数据框 2)的行和列的索引。

我想从数据框 2 中提取值,并在数据框 1 中的每一行的名为“行”和“列”的列中说明索引。

我使用了一个简单的 for 循环来解决这个问题,但它很耗时,大约需要 9 分钟,R 中的函数还有其他方法可以解决这个问题吗?

for(i in 1:nrow(datafram1)) {
  dataframe1$value[i] = dataframe2[dataframe1$row[i],dataframe1$columns[i]]
}

【问题讨论】:

  • 请不要发布代码/数据/错误的图像:它不能被复制或搜索 (SEO),它会破坏屏幕阅读器,并且它可能不适合某些移动设备。参考:meta.stackoverflow.com/a/285557/3358272(和xkcd.com/2116)。请直接包含代码或数据(例如,dput(head(x))data.frame(...))。

标签: r dataframe for-loop apply lookup


【解决方案1】:

您实际上不需要 for 循环来执行此操作。只需使用行名和列名将新列添加到数据框中:

DataFrame1$value <- DataFrame2[DataFrame1$row, DataFrame1$column]

这应该会更快。如果您想尝试不同的方式,可以尝试将值添加到新向量,然后使用cbind 将向量加入数据框。您尝试在循环期间更新整个数据框这一事实很可能会减慢它的速度。

【讨论】:

    【解决方案2】:

    也许你可以试试下面的代码

    dataframe1$value <- dataframe2[as.matrix(dataframe1[c("row","columns")])]
    

    【讨论】:

      【解决方案3】:

      由于您的循环仅考虑 df1 中的行,您可以削减 df2 上的剩余 roes,然后使用cbind

      dataframe2 <- dataframe2[nrow(dataframe1),]
      df3 <- cbind(dataframe1, dataframe2)
      

      【讨论】:

      • 他们没有相同的行
      猜你喜欢
      • 1970-01-01
      • 2018-12-08
      • 1970-01-01
      • 1970-01-01
      • 2020-11-26
      • 1970-01-01
      • 2021-12-26
      • 1970-01-01
      • 2019-01-21
      相关资源
      最近更新 更多