我有一个网站图像指标数据集,该数据集需要覆盖NA
个数据。以前,我在website_index
上加入了两个表。但是,现在我需要返回并为多行添加多列数据。我不确定是否可以再次连接该表(由于某些数据已经存在,它会创建重复表吗?)是否应该使用另一种方法?
我应该补充一点,这跨越了数千行数据。 website_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"
答案 0 :(得分:0)
这是将NA
替换为"value"
的一种方法。
dat[is.na(dat)] <- "value"
dat
# website_index metric1 metric2
# 1 1 value value
# 2 2 value value
# 3 3 red green
# 4 4 blue green`
数据
dat <- read.table(text = "website_index metric1 metric2
1 NA NA
2 NA NA
3 'red' 'green'
4 'blue' 'green'",
header = TRUE, stringsAsFactors = FALSE)
答案 1 :(得分:0)
对于需要内存和速度的庞大数据集,使用data.table
的以下解决方案应该更快。对于正常情况,请使用@www
library(data.table)
setDT(dat)
for (j in names(dat)) set(dat, which(is.na(dat[[j]])), j, "value")
答案 2 :(得分:0)
更新以匹配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]]
}
}
}
这是最有效的方法吗?疑。但是,当您提到联接表时,我不太确定这是否能回答您的真实问题。也许添加一个您想要按照@Frank建议加入的示例表会有所帮助吗?