Я столкнулся с проблемой, данные состоят из двух условий, и в них есть две биологические копии и две технические. Теперь я хотел бы сохранить только те строки, в которых есть хотя бы одно значение, отличное от NA, для каждого технического дубликата.
Во-первых, есть небольшая таблица макетов, чтобы лучше описать сам df. Далее, сначала 15 строк исходных данных и, как последний, мой код.
Я уверен, что есть лучший способ сделать это ... ура
Accession M_bio1_tech1 M_bio1_tech2 M_bio2_tech1 M_bio2_tech2 M_bio3_tech1 M_bio3_tech2 T_bio1_tech1 T_bio1_tech2 T_bio2_tech1 T_bio2_tech2 T_bio3_tech1 T_bio3_tech2
A NA 1 NA 1 1 1 1 1 1 1 1 1
B 1 1 1 1 1 1 1 1 1 1 1 1
C 1 1 1 1 1 1 1 1 1 1 1 1
D 1 NA 1 1 1 1 1 1 1 1 1 1
E 1 1 1 1 NA NA NA NA NA 1 1 1
F 1 1 1 1 1 1 1 1 1 1 1 1
G 1 1 1 1 1 1 1 1 1 1 1 1
H NA NA NA 1 1 1 NA 1 NA 1 NA 1
I 1 1 NA 1 1 1 1 1 1 1 1 1
> ATG8[c(1:15),]
# A tibble: 15 x 13
Accession ATG8_Mock_1_1 ATG8_Mock_1_2 ATG8_Mock_2_1 ATG8_Mock_2_2 ATG8_Mock_3_1 ATG8_Mock_3_2 ATG8_TREAT_1_1
<chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 sp 11000000000 14000000000 16000000000 13000000000 15000000000 16000000000 30000000000
2 AT3G0984~ NA 3400000 NA NA NA 1500000 4300000
3 AT5G0334~ NA NA NA NA NA NA NA
4 AT3G5323~ NA NA NA NA NA NA 6300000
5 sp 13000000000 32000000000 22000000000 35000000000 19000000000 31000000000 17000000000
6 AT4G2198~ 7100000000 17000000000 11000000000 17000000000 14000000000 22000000000 26000000000
7 sp 290000000 820000000 660000000 950000000 280000000 360000000 420000000
8 AT1G0901~ 390000000 780000000 890000000 890000000 270000000 290000000 1300000000
9 ATCG0049~ 1100000000 2400000000 35000000 30000000 790000000 870000000 320000000
10 AT3G0853~ 11000000 38000000 54000000 67000000 38000000 37000000 130000000
11 AT3G1113~ 17000000 53000000 70000000 73000000 44000000 51000000 140000000
12 AT3G4431~ 45000000 99000000 5000000 9900000 8000000 23000000 12000000
13 AT2G4711~ NA 170000000 NA NA NA NA 960000000
14 AT1G5506~ NA NA NA NA NA NA NA
15 AT5G0250~ 27000000 80000000 23000000 31000000 52000000 74000000 90000000
# ... with 5 more variables: ATG8_TREAT_1_2 <dbl>, ATG8_TREAT_2_1 <dbl>, ATG8_TREAT_2_2 <dbl>, ATG8_TREAT_3_1 <dbl>,
# ATG8_TREAT_3_2 <dbl>
>
ATG8_long<-melt(data = ATG8, id.vars = c("Accession"), measure.vars = c("ATG8_Mock_1_1", "ATG8_Mock_1_2", "ATG8_Mock_2_1", "ATG8_Mock_2_2", "ATG8_Mock_3_1",
"ATG8_Mock_3_2", "ATG8_TREAT_1_1", "ATG8_TREAT_1_2", "ATG8_TREAT_2_1", "ATG8_TREAT_2_2", "ATG8_TREAT_3_1", "ATG8_TREAT_3_2" ))
ATG8_long<-ATG8_long %>% drop_na(Accession)
ATG8_long$na_count <- apply(ATG8_long, 1, function(x) sum(is.na(x)))
ATG8_long %>% mutate_if(is.factor, as.character) -> ATG8_long
IDs<-unique(ATG8_long$Accession)
result<-data.frame()
for (i in 1:length(IDs)){
temp <- ATG8_long[ATG8_long$Accession==IDs[i],]
M1_1<-temp[which(temp$variable == "ATG8_Mock_1_1"),]
M1_2<-temp[which(temp$variable == "ATG8_Mock_1_2"),]
M12<-rbind(M1_1,M1_2)
M12<-M12[!(is.na(M1_1$value)) | !(is.na(M1_2$value)),]
M2_1<-temp[which(temp$variable == "ATG8_Mock_2_1"),]
M2_2<-temp[which(temp$variable == "ATG8_Mock_2_2"),]
M22<-rbind(M2_1,M2_2)
M22<-M22[!(is.na(M2_1$value)) | !(is.na(M2_2$value)),]
M3_1<-temp[which(temp$variable == "ATG8_Mock_3_1"),]
M3_2<-temp[which(temp$variable == "ATG8_Mock_3_2"),]
M33<-rbind(M3_1,M3_2)
M33<-M33[!(is.na(M3_1$value)) | !(is.na(M3_2$value)),]
T1_1<-temp[which(temp$variable == "ATG8_TREAT_1_1"),]
T1_2<-temp[which(temp$variable == "ATG8_TREAT_1_2"),]
T12<-rbind(T1_1,T1_2)
T12<-T12[!(is.na(T1_1$value)) | !(is.na(T1_2$value)),]
T2_1<-temp[which(temp$variable == "ATG8_TREAT_2_1"),]
T2_2<-temp[which(temp$variable == "ATG8_TREAT_2_2"),]
T22<-rbind(T2_1,T2_2)
T22<-T22[!(is.na(T2_1$value)) | !(is.na(T2_2$value)),]
T3_1<-temp[which(temp$variable == "ATG8_TREAT_3_1"),]
T3_2<-temp[which(temp$variable == "ATG8_TREAT_3_2"),]
T33<-rbind(T3_1,T3_2)
T33<-T33[!(is.na(T3_1$value)) | !(is.na(T3_2$value)),]
temp<-rbind(M12, M22,M33,T12, T22,T33 )
result<-rbind(result,temp)
}