我有一个带有557列的大型数据框,我想将其拆分为多个不同列长的数据框。我尝试在下面解释我希望使用较小的数据框实现的目标。
我的数据框:
> df <- data.frame(row.names = c("x","y","z"),
"a" = c(2844.8,10232.5,20150.6),
"b" = c(1430.9,29263.6,26334.5),
"c" = c(906.2,6019.1,6848.6),
"REG01" = c(1871.0,69618.7,45032.2),
"d" = c(2106.0,29929.6,58626.1),
"e" = c(1818.8,232371.1,42713.6),
"REG02" = c(1364.5,57561.7,20656.4),
"f" = c(520.4,46754.9,9036.9),
"REG03" = c(1821.4,43862.3,51876.1))
> df
a b c REG01 d e REG02 f REG03
x 2844.8 1430.9 906.2 1871.0 2106.0 1818.8 1364.5 520.4 1821.4
y 10232.5 29263.6 6019.1 69618.7 29929.6 232371.1 57561.7 46754.9 43862.3
z 20150.6 26334.5 6848.6 45032.2 58626.1 42713.6 20656.4 9036.9 51876.1
所需的输出-3个数据帧的列表,如下所示:
> df.list[[1]]
a b c REG01
x 2844.8 1430.9 906.2 1871.0
y 10232.5 29263.6 6019.1 69618.7
z 20150.6 26334.5 6848.6 45032.2
> df.list[[2]]
d e REG02
x 2106.0 1818.8 1364.5
y 29929.6 232371.1 57561.7
z 58626.1 42713.6 20656.4
> df.list[[3]]
f REG03
x 520.4 1821.4
y 46754.9 43862.3
z 9036.9 51876.1
我真的很难知道从哪里开始,因为结果数据帧将具有不同的大小,要拆分的列是不同的名称,并且鉴于我的实际数据要大得多(我的结果将是44个数据帧),我可以t显式引用col名称(尽管它们都以REG开头,并且后跟2位数字)。
感谢您的任何建议
答案 0 :(得分:3)
您可以使用split.default
split.default(df, c(0, cumsum(grepl("^REG", names(df)[-ncol(df)]))))
$`0`
a b c REG01
x 2844.8 1430.9 906.2 1871.0
y 10232.5 29263.6 6019.1 69618.7
z 20150.6 26334.5 6848.6 45032.2
$`1`
d e REG02
x 2106.0 1818.8 1364.5
y 29929.6 232371.1 57561.7
z 58626.1 42713.6 20656.4
$`2`
f REG03
x 520.4 1821.4
y 46754.9 43862.3
z 9036.9 51876.1
答案 1 :(得分:1)
以base-R
lapply(split( as.data.frame(t(df)), cumsum(c(1,grepl("REG",colnames(df))))[1:ncol(df)]),t)
给予
$`1`
a b c REG01
x 2844.8 1430.9 906.2 1871.0
y 10232.5 29263.6 6019.1 69618.7
z 20150.6 26334.5 6848.6 45032.2
$`2`
d e REG02
x 2106.0 1818.8 1364.5
y 29929.6 232371.1 57561.7
z 58626.1 42713.6 20656.4
$`3`
f REG03
x 520.4 1821.4
y 46754.9 43862.3
z 9036.9 51876.1