如何在r中转换数据帧的许多列

时间:2016-07-21 11:19:38

标签: r

我有一个简单的数据框

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中找到解决方案,但感谢任何帮助!

1 个答案:

答案 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])]

注意:这是基于列的顺序相同的假设。