Изменение кадра данных - Итерирование значений в строках

У меня есть фрейм данных и просто хочу изменить значения в нескольких столбцах от строк до целых чисел.

Как я могу достичь этого в R?

Предположим, что это мои данные:

data.frame(
    X = sample(1:10),
    Y = sample(c("yes", "no"), 10, replace = TRUE),
    Z = sample(c("yes", "no"), 10, replace = TRUE),
    ZZ = sample(c("yes", "no"), 10, replace = TRUE))

и я хочу изменить:

измените столбец Y с заданной функцией f [ex. функция f измените «да» на 2 и «нет» на 1 во второй колонке]

Пример такой функции

f <- function (x) {
 if(x == "yes") {
   return 2;
 }
 else {
   return 11;
 }
}

измените столбец ZZ с заданной функцией g [ex. функция g измените «да» на 3 и «нет» на 4 в четвертом столбце]

1
nl ja de
Просьба предоставить воспроизводимый пример ваших данных http://tinyurl.com/reproducible-000
добавлено автор Didzis Elferts, источник

1 ответы

Здесь решение использует функцию ifelse() .

df<-data.frame(
  X = sample(1:10),
  Y = sample(c("yes", "no"), 10, replace = TRUE),
  Z = sample(c("yes", "no"), 10, replace = TRUE),
  ZZ = sample(c("yes", "no"), 10, replace = TRUE))

df$Y=as.integer(ifelse(df$Y=="yes",2,1))
df$ZZ=as.integer(ifelse(df$ZZ=="yes",3,4))
str(df)
'data.frame':   10 obs. of  4 variables:
 $ X : int  9 4 8 5 1 7 2 10 6 3
 $ Y : int  2 2 1 1 2 1 2 1 1 1
 $ Z : Factor w/ 2 levels "no","yes": 2 1 2 2 1 2 2 1 1 1
 $ ZZ: int  3 3 4 3 3 3 3 4 4 3

РЕДАКТИРОВАТЬ

Для выполнения функций f и g для одной и той же задачи

f<-function(x){
  as.integer(ifelse(x=="yes",2,1))
}

g<-function(x){
  as.integer(ifelse(x=="yes",3,4))
}

df$Y=f(df$Y)
df$ZZ=g(df$ZZ)
3
добавлено
И что, если у вас есть две заданные функции f, g, и вы не можете делать какие-либо предположения о том, как они работают?
добавлено автор user364622, источник
Отлично .. Но вы можете просто применить функцию к вектору ... Я все еще пытаюсь использовать функцию «применимо» как-то.
добавлено автор user364622, источник