如何使用其他数据框的单元格值填充/填充数据框列

时间:2020-01-13 18:34:04

标签: r dataframe for-loop apply lookup

我有两个数据框

enter image description here

enter image description here

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

我想从数据帧2中提取值,并为数据帧1中的每一行使用名为“行”和“列”的列中列出的索引。

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

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

3 个答案:

答案 0 :(得分:1)

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

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

这应该工作更快。如果要尝试其他方法,可以尝试将值添加到新向量中,然后使用cbind将向量连接到数据帧。您正在尝试在循环中更新整个数据帧的事实很可能会减慢其速度。

答案 1 :(得分:0)

让循环只考虑df1中的行,则可以削减df2上的多余子项,然后使用cbind

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

答案 2 :(得分:0)

也许您可以尝试下面的代码

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