Цель состоит в том, чтобы заполнить новый столбец (df $ final.count) в соответствии с несколькими условиями.Пример кадра данных ниже:
structure(list(item = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L,
2L, 2L, 2L), .Label = c("a", "b"), class = "factor"), raw.count = c(16,
300, 203, 6, 5, 40, 20, 16, 300, 203), loc = structure(c(4L,
2L, 2L, 2L, 2L, 3L, 3L, 4L, 2L, 3L), .Label = c(" ", "in", "out",
"NA"), class = "factor"), side = structure(c(4L, 2L, 3L, 2L,
3L, 4L, 3L, 4L, 2L, 4L), .Label = c("F", "L", "R", "NA"), class = "factor"),
recount = c(15, NA, NA, 7, NA, NA, 16, 15, NA, NA), final.count = c(NA_real_,
NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_,
NA_real_, NA_real_, NA_real_), EXPECTED = c(15, 60, 120,
7, 5, 40, 16, 15, 300, 203)), row.names = c(NA, 10L), class = "data.frame")
Цель состоит в том, чтобы заполнить новый столбец (df $ final.count) в соответствии со следующими условиями, влияющими на несколько столбцов:
- , если существуетэто число в df $ recount Чем df $ recount следует использовать в df $ final.count без каких-либо условий для других значений столбца
- , если в df $ recount нет числа (NA) И df $ raw.count>10 И df $ loc находится "в" И df $ сторона является "L", чем функция 0.2 * df $ raw.count должен использоваться для заполнения df $ final.count
- , если нет числа (NA)в df $ recount И df $ raw.count> 10 И df $ loc - «в» И df $ сторона - «R», чем функция 0.6 * df $ raw.count должен использоваться для заполнения df $ final.count (только ПРИМЕЧАНИЕсторона отличается)
- , если df $ raw.count = <10, чем следует использовать df $ raw.count, кроме случаев, когда 1 содержит </li>
- , если df $ loc "out", чем df $final.count <- df $ raw.count безусловный для других значений столбца, кроме 1, если указано выше </li>
Я пробовал различные версии if / else if вцикл, например:
for (i in 1:nrow(df)) {
if(!is.na(df$recount[i]) {
df$final.count <- df$recount
}
else if(df$item[i] == "a" & df$raw.count[i] > 10 & df$loc[i] == "in" & df$side[i] == "L") {
df$final.count <- 0.2*df$raw.count[i]
}
else if(df$item[i] == "a" & df$raw.count[i] > 10 & df$loc[i] == "in" & df$side[i] == "R") {
df$final.count <- 0.6*df$raw.count[i]
}
else if(df$raw.count <= 10){
df$final.count <- df$raw.count
}
else(df$loc == "out") {
df$final.count <- df$raw.count
}
}