Как назначить значения в новом столбце на основе условия в другом столбце, используя функции if и non-if в R - PullRequest
0 голосов
/ 11 января 2019

У меня есть набор данных "данные". Если переменная (в длинной форме) содержит A1 или D1, присвойте «1: 5 dil» в столбце «$ разбавления». Если он имеет B1 или C1, присвойте «1:10 dil». Как я могу сделать это, используя функции if и non-if?

В исходных данных у меня много заданий, поэтому я хочу посмотреть, работают ли не-условия лучше

cycles <- c(1:100)
A1 <- c(1:100)
B1 <- c(100:199)
C1 <- c(5:104)
D1 <- c(0:99)
data <- data.frame("cycles" = cycles, "A1" = A1, "B1" = B1, "C1" = C1, "D1" = D1)


library(reshape2)
data <- melt(data, id.vars=c("cycles"))
data$dilutions <- if(data$variable=="A1"|"D1" <- "1:5 dil", data$variable== "B1" | "C1" <- "1:10 dil")

1 Ответ

0 голосов
/ 11 января 2019

Как уже упоминалось в комментариях, вы используете оператор if неправильно. Вот два подхода, один из которых использует ifelse(), а другой использует прямые назначения для подмножеств.

data$dilutions <- ifelse(data$variable == "A1" | data$variable == "D1", "1:5 dil", "1:10 dil")

Если у вас есть больше, чем эти два возможных результата, вам может потребоваться объединить свои ifelse утверждения (т. Е. Использовать другой ifelse() для else части вызова.

В противном случае вы можете использовать прямые назначения, например:

data$dilutions[data$variable=="A1" | data$variable== "D1"] <- "1:5 dil"
data$dilutions[data$variable=="B1" | data$variable== "C1"] <- "1:10 dil"
...