【发布时间】:2019-09-27 01:57:47
【问题描述】:
我想生成一个数据框列表并将相同的函数应用于每个数据框。如果没有大量代码行,我不知道如何优雅地做到这一点。
从数据框df,
id <- c('a', 'a', 'b', 'b', 'b', 'c', 'c', 'd', 'd', 'e')
x <- rnorm(n = 10, mean = 25, sd = 3)
y <- rnorm(n = 10, mean = 45, sd = 4.5)
z <- rnorm(n = 10, mean = 70000, sd = 10)
type <- c(rep("gold", 2),
rep("silver", 4),
rep("bronze", 4))
df <- data.frame(id, x, y, z, type)
我使用基于一个变量的简单阈值规则创建了一堆其他数据集
df_25 <- df[df$x < 25,]
df_20 <- df[df$x < 20,]
# and so on
然后我将函数应用于每个数据集;我可以对每个数据集单独执行此操作,也可以对数据集列表执行此操作
# individually
df <- df_18 %>%
dplyr::group_by(id) %>%
dplyr::mutate(nb1= sum(x),
nb2 = sum(x != 25))
# to a list
ls1 <- list(df_25, df_20)
func_1 <- function(x) {
x <- x %>%
dplyr::group_by(id) %>%
dplyr::mutate(nb1= sum(x),
nb2 = sum(x != 25))
}
ls1 <- lapply(ls1, function(x) {x[c("id","x")]
<- lapply(x[c("id","x")], func_1)
x})
df_25 <- ls1[[1]]
df_20 <- ls1[[2]]
无论如何,当我处理非常大的数据集时,这需要大量的行和时间。如何通过上面定义的函数简化和加快具有正确可识别名称的数据集的生成和新变量的创建?
我还没有找到这个双重问题的正确答案,欢迎您的帮助!
【问题讨论】:
标签: r dataframe for-loop lapply