#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