R - 根据奇数特定列中的值替换特定偶数列中的值 - 应用程序到整个数据帧

时间:2017-10-05 21:04:14

标签: r dataframe

我的数据框:

data <- data.frame(A = c(1,5,6,8,7), qA = c(1,2,2,3,1), B = c(2,5,6,8,4), qB = c(2,2,1,3,1))

对于案例A和qA(=质量A):我希望分配给质量值1和3的值被NA替换

对于案例B和qB也是如此

最终数据必须如下:

desired_data <- data.frame(A = c("NA",5,6,"NA","NA"), qA = c(1,2,2,3,1), B = c(2,5,"NA","NA","NA"), qB = c(2,2,1,3,1))

我的问题是如何执行该操作?

我有一个包含大约90列的大型数据框,因此我需要不需要列名正常工作的代码。

为了提供帮助,我有一部分代码选择以“q”字母开头的列:

data[,grep("^[q]", colnames(data))]

2 个答案:

答案 0 :(得分:0)

一种解决方案是在两个表中分离并在碱基R中使用矢量化

data <-  data.frame(A = c(1,5,6,8,7), qA = c(1,2,2,3,1), B = c(2,5,6,8,4), qB = c(2,2,1,3,1))
data
#>   A qA B qB
#> 1 1  1 2  2
#> 2 5  2 5  2
#> 3 6  2 6  1
#> 4 8  3 8  3
#> 5 7  1 4  1

quality <- data[,grep("^[q]", colnames(data))]
data2 <- data[,setdiff(colnames(data), names(quality))]

data2[quality == 1 | quality == 3] <- NA
data2
#>    A  B
#> 1 NA  2
#> 2  5  5
#> 3  6 NA
#> 4 NA NA
#> 5 NA NA

答案 1 :(得分:0)

你可以这样做......

data[,seq(1,ncol(data),2)][(data[,seq(2,ncol(data),2)]==1)|
                           (data[,seq(2,ncol(data),2)]==3)] <- NA

data
      A    qA     B    qB
1    NA     1     2     2
2     5     2     5     2
3     6     2    NA     1
4    NA     3    NA     3
5    NA     1    NA     1