R 如何基于一列中的值使用重复更新多行?

R 如何基于一列中的值使用重复更新多行?,r,dataframe,R,Dataframe,我有一个需要覆盖NA数据的网站图像度量数据集。之前,我加入了网站上的两个表。但是,现在我需要返回并为多行添加多列数据。我不确定是否可以再次加入表(由于某些数据已经存在,它会创建重复项吗?)我是否应该使用其他方法 我应该补充一点,这跨越了1000行数据。website\u index重复了多次,我试图添加20多列值。因此,我不希望使用c()手动将列值添加到行中,因为我可能会对所有值产生复制错误 我正在尝试更新的数据集的一个示例 website_index metric1 metric2 1

我有一个需要覆盖
NA
数据的网站图像度量数据集。之前,我加入了
网站上的两个表。但是,现在我需要返回并为多行添加多列数据。我不确定是否可以再次加入表(由于某些数据已经存在,它会创建重复项吗?)我是否应该使用其他方法

我应该补充一点,这跨越了1000行数据。
website\u index
重复了多次,我试图添加20多列值。因此,我不希望使用
c()
手动将列值添加到行中,因为我可能会对所有值产生复制错误

我正在尝试更新的数据集的一个示例

website_index metric1 metric2
1               NA      NA
2               NA      NA
3              "red"    "green"
4              "blue"   "green"
是否希望数据集看起来像这样

website_index metric1 metric2
1              "value1"   "value2"
2              "value3"   "value4"
3              "red"    "green"
4              "blue"   "green"

以下是将
NA
替换为
的“值”
的方法


dat[is.na(dat)]这里有一种方法可以将
na
替换为
“值”


dat[is.na(dat)]对于需要内存和速度的超大数据集,使用
data.table的以下解决方案应该更快。对于正常情况,请使用@www提供的解决方案

library(data.table)
setDT(dat)
for (j in names(dat)) set(dat, which(is.na(dat[[j]])), j, "value")

对于需要内存和速度的超大数据集,以下使用
data.table
的解决方案应该更快。对于正常情况,请使用@www提供的解决方案

library(data.table)
setDT(dat)
for (j in names(dat)) set(dat, which(is.na(dat[[j]])), j, "value")

更新以匹配OP的编辑

使用base for循环的解决方案

#example data frame
x <-  data.frame(web = c(1,2,3,4), metrc = c(NA,NA,'red','blue'), metrc2 = c(NA, NA, 'green','green'), stringsAsFactors = FALSE)


#initializing empty vector
l <- c()

#creating "value" with a count of NAs in data frame
for(i in 1:sum(is.na(x))){
    l[[i]] <- paste0('value',i)
 }

#nested for loop that check each row, column, fills in first item from the vector
#to the NA, and removes item from vectors.

for(i in 1:nrow(x)){
  for(j in 1:ncol(x)){
    if(is.na(x[i,j])) {

      x[i,j] <- l[[1]]
      l <- l[l!=l[1]]

    }
  }
}
#示例数据帧

x更新以匹配OP的编辑

使用base for循环的解决方案

#example data frame
x <-  data.frame(web = c(1,2,3,4), metrc = c(NA,NA,'red','blue'), metrc2 = c(NA, NA, 'green','green'), stringsAsFactors = FALSE)


#initializing empty vector
l <- c()

#creating "value" with a count of NAs in data frame
for(i in 1:sum(is.na(x))){
    l[[i]] <- paste0('value',i)
 }

#nested for loop that check each row, column, fills in first item from the vector
#to the NA, and removes item from vectors.

for(i in 1:nrow(x)){
  for(j in 1:ncol(x)){
    if(is.na(x[i,j])) {

      x[i,j] <- l[[1]]
      l <- l[l!=l[1]]

    }
  }
}
#示例数据帧

谢谢你!我意识到我的问题措辞含糊不清,他们都说“值”-我需要在列中添加多个不同的值,所以这对我不起作用。谢谢!我意识到我的问题措辞含糊不清,他们都说“值”-我需要在各列之间添加多个不同的值,因此这对我不起作用。您可能希望在完成示例时提供一些有关规则的信息,以获得所需的输出。也许您有另一个表来显示与此示例相匹配的内容(因为您提到了一个连接)?您可能希望在完成此示例时提供一些有关导致所需输出的规则的信息。也许您有另一个表来显示与此示例匹配的表(因为您提到了一个连接)?