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