заменить на пороговое значение в df в R

#r #replace

#r #заменить

Вопрос:

У меня есть df, такой как

 COL1 COL2 COL3 
A 10 20
B 3 34
C 3 21
D 34 4
  

и я хотел бы заменить все значения в COL2 и COL3 < 10 на «S»
и все значение >=10 на «N.S»
и получите

 COL1 COL2 COL3 
A N.S N.S
B S N.S
C S N.S
D N.S S
  

Я пытался :

 tab$pvalue_cov[tab$COL1<10 ] <- "S"
tab$pvalue_cov[tab$COL1>=10 ] <- "N.S"
tab$pvalue_gc[ tab$COL2<10 ] <- "S"
tab$pvalue_gc[ tab$COL2>=10 ] <- "N.S"
  

Ответ №1:

Вы можете подмножествовать столбцы и использовать ifelse() для их соответствующего заполнения:

 tab[c("COL2_p", "COL3_p")] <- ifelse(tab[c("COL2", "COL3")] < 10, "S", "N.S")
tab
  COL1 COL2 COL3 COL2_p COL3_p
1    A   10   20    N.S    N.S
2    B    3   34      S    N.S
3    C    3   21      S    N.S
4    D   34    4    N.S      S
  

Данные:

 tab <- read.table(header = TRUE, text = "COL1 COL2 COL3 
A 10 20
B 3 34
C 3 21
D 34 4")
  

Ответ №2:

Вы также можете заменить его напрямую :

 cols <- c('COL2', 'COL3')
tmp <- tab[cols]
tab[cols][tmp < 10] <- 'S'
tab[cols][tmp >= 10] <- 'N.S'
tab
#  COL1 COL2 COL3
#1    A  N.S  N.S
#2    B    S  N.S
#3    C    S  N.S
#4    D  N.S    S