r - 循环遍历 R 中最后一个 data.frame 的 data.frame 的变量
问题描述
我编写了一个函数来将data.frame 中的任何一个变量(即列)更改为其唯一级别并返回更改后的 data.frame。
我想知道如何使用我的函数一次更改多个变量并获得一个包含所有更改的最终 data.frame?
我尝试了以下方法,但这给出了多个 data.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]))
解决方案
在函数中,我们可以更改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)