2017-10-05 41 views
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)) 

對於情況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))] 

回答

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 
+0

謝謝安德魯:它的工作,它非常快! – Loulou

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 
相關問題