R 创建数据帧列表

R 创建数据帧列表,r,list,dataframe,R,List,Dataframe,我有一个如下所示的数据帧: a <- as.data.frame(t(matrix(c('gr1','','','','gr2','','','','','gr3','','', rep(1,12),rep(2,12)),ncol=3))) 列V1-V4属于gr1,列V5-V9属于gr2,列V10-V12属于gr3 我想将这些组(gr1-gr3)和它们对应的列分开,并将它们全部放在一个列表中,稍后我可以循环并进行一些分析。因此,期望的输出是

我有一个如下所示的数据帧:

a <- as.data.frame(t(matrix(c('gr1','','','','gr2','','','','','gr3','','',
                        rep(1,12),rep(2,12)),ncol=3)))
列V1-V4属于gr1,列V5-V9属于gr2,列V10-V12属于gr3

我想将这些组(gr1-gr3)和它们对应的列分开,并将它们全部放在一个列表中,稍后我可以循环并进行一些分析。因此,期望的输出是:


list1=(gr1、gr2、gr3)
,其中gr1、gr2和gr3中的每一个都是一个带有相应列的数据帧。

我们根据第一行元素是否为空(
'
)创建一个分组变量。然后,
将带有“grp”的“a”的列名拆分为一个
列表
,然后使用
lappy
子集
列和行(删除第一行),将“lst”的
名称
更改为我们提取“a”第一行的“gr”值

grp <- cumsum(as.character(unlist(a[1,]))!='')
lst <- lapply(split(names(a), grp),  function(nm) a[-1, nm])

nm1 <- as.character(unlist(a[1,]))
names(lst) <-  nm1[nzchar(nm1)]
grp <- cumsum(as.character(unlist(a[1,]))!='')
lst <- lapply(split(names(a), grp),  function(nm) a[-1, nm])

nm1 <- as.character(unlist(a[1,]))
names(lst) <-  nm1[nzchar(nm1)]
 lapply(lst, function(x) {
      x[] <- lapply(x, function(.x) as.numeric(as.character(.x)))
      x})