寻找帮助编写函数以根据列的值自动分配数据帧的帮助?例如,
df $ x包含值a,b,c,d
我想制作名为a,b,c,d的单独数据框,其中包含所有值x =='a'或x =='b'等。我知道有几种方法可以手动执行此操作,但我希望有关如何自动化的指导?谢谢!
答案 0 :(得分:3)
split
函数返回子集化数据框列表:
split(df, df$x)
编辑:
如果要为每个子集化数据框创建新对象:
for (i in levels(df$x)) {
command <- paste0(i, "<-subset(df, x=='", i, "')")
eval(parse(text=command))
}
编辑2:
要通过两个或更多变量进行拆分,更自动化的解决方案是创建一个函数,该函数将数据框和列名称作为输入,用于对数据帧进行子集化:
create_new_df <- function (dataframe, vars) {
# Creates a new data frame in the global environment based on names of variables in 'vars'
split(dataframe, as.list(dataframe[, vars]), drop = TRUE) %>%
lapply(function (subset_dataframe) {
new_object_name <- paste(as.character(subset_dataframe[1, vars])
# The double arrowed '<<-' creates a new object in the global environment
command <- paste0(new_object_name, collapse="_"), "<<-subset_dataframe")
eval(parse(text=command))
}) %>%
invisible()
}
然后可以使用此函数创建具有任意变量组合的新对象:
variables <- c("x", "y", "z")
create_new_df(df, variables)
答案 1 :(得分:0)
也许不是最好的方法,但会完成工作。
vars_df = unique(df$x)
for (i in 1:length(vars_df)) {
assign(paste0(vars_df[i]), df %>% filter(x == vars_df[i]), envir = .GlobalEnv)
}