根据作为字符向量传递的列名拆分数据框

时间:2017-07-19 09:58:06

标签: r

我有一个数据框

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))

有人可以建议如何根据字符向量列表执行拆分

1 个答案:

答案 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