перебирая переменные data.frame, приводя один последний data.frame в R - PullRequest
1 голос
/ 27 апреля 2020

Я написал функцию для изменения любой переменной (т.е. столбца) в data.frame до ее уникальных уровней и возврата измененного data.frame.

Интересно, как чтобы изменить несколько переменных одновременно с помощью моей функции и получить один окончательный data.frame со всеми изменениями ?

Я пробовал следующее, но это дает несколько данных .frames, в то время как только последний data.frame является желаемым выводом :

data <- data.frame(sid = c(33,33, 41), pid = c('Bob', 'Bob', 'Jim'))

#== My function for ONE variable:
f <- function(data, what){
 data[[what]] <- as.numeric(factor(data[[what]], levels = unique(data[[what]])))
 return(data)
}  

# Looping over `what`:
what <- c('sid', 'pid')
lapply(seq_along(what), function(i) f(data, what[i]))

1 Ответ

2 голосов
/ 27 апреля 2020

В функции мы можем изменить на return data[[what]]

f <- function(data, what){
   data[[what]] <- as.numeric(factor(data[[what]], levels = unique(data[[what]])))
   data[[what]]
  }  

data[what] <- lapply(seq_along(what), function(i) f(data, what[i]))

Или сделать

data[what] <-  lapply(what, function(x) f(data, x))

Или просто

data[what] <- lapply(what, f, data = data)
...