我有一个数据框
df=data.frame(v1=c('abc','xyz','abc','abc'),v2=c(400,300,400,300),v3=c(1,2,3,4))
df
v1 v2 v3
abc 400 1
xyz 300 2
abc 400 3
abc 300 4
我想根据第v1列和第1列分割这个数据帧。 V2。我知道我可以使用以下命令
来做到这一点a_split=split(df,list(df$v1,df$v2))
我得到了如下所需的结果:
> a_split[1]
$abc.300
v1 v2 v3
4 abc 300 4
> a_split[2]
$xyz.300
v1 v2 v3
2 xyz 300 2
> a_split[3]
$abc.400
v1 v2 v3
1 abc 400 1
3 abc 400 3
这里的问题是,需要拆分数据的变量列表将由用户作为字符向量传递。所以它会像
var_name=c("v1","v2")
现在,如果我尝试直接使用此向量,则无法获得所需的结果
a_split=split(df,list(var_name))
有人可以建议如何根据字符向量列表执行拆分
答案 0 :(得分:0)
你可以包装一个函数;对于任何数据框,变量为df
,对于要选择的列,变量为col_choices
。
f <- function(df, col_choices = NULL){
if(is.data.frame(df) && !is.null(col_choices)){
split(df, col_choices)
}
}
处理您的示例数据:
> f(df = df, col_choices = c('v2', 'v3'))
$v2
v1 v2 v3
1 abc 400 1
3 abc 400 3
$v3
v1 v2 v3
2 xyz 300 2
4 abc 300 4