dplyr的逐行+ replace_NAs:用其他列中的值替换多列中的NA

麦卡里

我有兴趣用同一行的参考值替换一行中的所有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()输入问题refx替换为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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

dplyr按列逐行

来自分类Dev

用列表中的值逐行替换NA

来自分类Dev

dplyr和逐行采样

来自分类Dev

R - 逐行替换选定列中的值

来自分类Dev

使用dplyr查找列中的最大值,并从其他列返回元素

来自分类Dev

过滤列以仅显示有值时,并删除R中的其他值(R,dplyr,lubridate)

来自分类Dev

用其他列中的修改日期替换该列中的NA值

来自分类Dev

当列查找来自其他数据时,R用dplyr替换嵌套的循环

来自分类Dev

如何使用dplyr mutate引用ifelse中的其他列

来自分类Dev

根据给定的索引用dplyr替换列中的值

来自分类Dev

用行/列逐行/列替换矩阵上的元素

来自分类Dev

R dplyr-逐行计算的总计

来自分类Dev

使用dplyr和tidyr逐行划分

来自分类Dev

熊猫中多列的逐行最大值的逐列计数

来自分类Dev

动态逐行连接列值

来自分类Dev

逐行连接3列的值

来自分类Dev

动态逐行连接列值

来自分类Dev

逐行求和两列

来自分类Dev

在R中,逐行遍历data.frame并访问列值

来自分类Dev

在列中逐行添加数字

来自分类Dev

Vim逐行替换

来自分类Dev

返回dplyr mutate中的多列

来自分类Dev

groupby 多列,然后在 dplyr 中求和

来自分类Dev

将列除以其他列,其本身取决于dplyr中的索引

来自分类Dev

逐行移动数组中的元素并移动其他元素?

来自分类Dev

用gnuplot逐行绘制

来自分类Dev

根据不同列中的值用NA替换多列中的值

来自分类Dev

用其他列的总和替换组的NA值

来自分类Dev

DataReader的值逐行