我有一个简单的数据框
d <- data.frame(var1=c(5,5,5),var1_c=c(5,NA,6),var2 =c(6,6,6),var2_c = c(8,6,NA))
有很多行和很多变量,都标记为“varXXX”和“varXXX_c”,我希望每次varXXX_c中都有一个NA,用varXXX变量中的值替换NA。 简而言之,我想做:
d[is.na(d$var1_c),"var1_c"] <- d$var1[is.na(d$var1_c)]
但是尝试找到一种更好的方法来复制粘贴并使用变量编号更改“1”。
我宁愿在基础R或dplyr中找到解决方案,但感谢任何帮助!
答案 0 :(得分:2)
我们可以使用grep
查找以var
开头的列名,后跟数字(\\d+
),后跟_
,后跟c
。同样,我们为var
提供了另一组逻辑索引,后跟一个或多个数字(\\d+
),直到字符串结尾($
),然后根据索引并将NA值(is.na(d[i1])
)更改为&#39; d [i2]`中的相应元素。
i1 <- grepl("var\\d+_c", names(d))
i2 <- grepl('var\\d+$', names(d))
d[i1][is.na(d[i1])] <- d[i2][is.na(d[i1])]
注意:这是基于列的顺序相同的假设。