R 基于作为字符向量传递的列名拆分数据帧

R 基于作为字符向量传递的列名拆分数据帧,r,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和v2拆分此数据帧。我知道我可以用下面的命令来做 a_split=split(df,list(df$v1,df$v2)) 我得到的预期结果如下: > a_split[

我有一个数据框

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

是否有人可以建议如何基于字符向量列表执行拆分

您可以将其包装在函数中;其中,对于任何数据帧,变量为
df
,对于要选择的列,变量为
col\u选项

f <- function(df, col_choices = NULL){
    if(is.data.frame(df) && !is.null(col_choices)){
        split(df, col_choices)
    }
}

data.frame
s是
list
s,所以
split(df,df[c(“v1”,“v2”)))
split(df,df[var_name])
很好。。。谢谢
> 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