我有兴趣用同一行的参考值替换一行中的所有NA。以下代码有效,但对于我的实际用例来说太慢了:
df = data.frame(ref = c(1,3,4,2,5), var1 = c(NA,3,4,2,1), var2 = c(1,3,NA,5,5))
for (i in 1:nrow(df)) {
ref_value = as.character(df$ref[i])
df[i,] = df[i,] %>% mutate_all(replace_na, replace = ref_value) }
我尝试通过以下修改来加快此过程,并在下面收到错误消息。
df = data.frame(ref = c(1,3,4,2,5), var1 = c(NA,3,4,2,1), var2 = c(1,3,NA,5,5))
df %>% rowwise() %>% mutate_all(replace_na, replace = ref)
错误:
错误:mutate()
输入问题ref
。x替换为data
长度2,而不是长度1ℹ输入ref
为(function (data, replace, ...) ...
。ℹ错误发生在第1行。
有什么建议?
我们可以使用coalesce
。循环遍历'var'列,并coalesce
与looped列和'ref'一起使用,以便无论在哪里NA
,它都将被'ref'中的相应元素替换,而其他非NA元素保持原样
library(dplyr) #>= 1.0.0
df %>%
mutate(across(starts_with('var'), ~ coalesce(., ref)))
# ref var1 var2
#1 1 1 1
#2 3 3 3
#3 4 4 4
#4 2 2 5
#5 5 1 5
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句