@ Комментарий Шри абсолютно правдив: не ожидайте, что значение -4
будет числом, когда вы вернете кадр (на самом деле это будет "-4"
. Я собираюсь предположить, что должно произойти что-то ещевот, так вот решение того, что, по вашему мнению, вам нужно: -)
func <- function(a,b) {
naa <- is.na(a)
nab <- is.na(b)
ifelse(naa,
ifelse(nab, "both", "first"),
ifelse(nab, "second", a-b))
}
mapply(func, df1[2:3], df2[2:3], SIMPLIFY=FALSE)
# $apple
# [1] "-4" "first"
# $peach
# [1] "second" "both"
Я не всегда доволен вложенным ifelse
, но это не так уж далеко.Это может быть лучшей возможностью для dplyr::case_when
, возможно, упражнением на потом.
Это может быть применено непосредственно к кадру, например:
df0 <- df1
df0[2:3] <- mapply(func, df1[2:3], df2[2:3], SIMPLIFY=FALSE)
df0
# month apple peach
# 1 march -4 second
# 2 april first both
Но (снова) как@ Шри сказал ранее, у тебя там не будет чисел:
str(df0)
# 'data.frame': 2 obs. of 3 variables:
# $ month: Factor w/ 2 levels "april","march": 2 1
# $ apple: chr "-4" "first"
# $ peach: chr "second" "both"