根据列名称将数据帧拆分为N个数据帧

时间:2019-02-06 15:59:27

标签: r dataframe

我有一个大数据(数千列)框架,其中很少有列具有重复的列名。然后,有一组列名,其中部分列名重复,而同一列名的另一部分不重复。

使用R和以上两个属性,我想将所有此类列拆分为不同的数据框以进行进一步分析。为此,我想在数据帧上运行以下动态逻辑:

  1. 首先:查找并将列名列cbind()复制到不同的数据框中。如果10个列具有相同的列名,则它们构成一个数据框,而另外5个具有相同列名的列构成另一个数据框。
  2. 第二:找到并cbind()将列名的列复制到不同的数据框中,如果 -之前的列名的字符串与{{1 }}用于另一列,而-之后的列名称字符串与另一列-之后的部分列名称不匹配。

下面是样本输入数据(大数据太大,但是遵循完全相同的属性),根据上面的示例,前两列将形成一个数据帧。将会有另一个数据框,其中包含从三列开始到最后一个列的列。

我尝试了-,但是到目前为止还没有解决。关于如何执行此操作的任何建议?

样本输入数据

split()

基于上面讨论的逻辑的输出

数据框1

structure(list(`A-DIODE` = c(1.2, 0.4), `A-DIODE` = c(1.3, 0.6
), `B-DIODE` = c(1.4, 0.8), `B-ACC1` = c(1.5, 1), `B-ACC2` = c(1.6, 
1.2), `B-ANA0` = c(1.7, 1.4), `B-ANA1` = c(1.8, 1.6), `B-BRICKID` = c(1.9, 
1.8), `B-CC0` = c(2L, 2L), `B-CC1` = c(2.1, 2.2), `B-DIGDN` = c(2.2, 
2.4), `B-DIGDP` = c(2.3, 2.6), `B-DN1` = c(2.4, 2.8), `B-DN2` = c(2.5, 
3), `B-DP1` = c(2.6, 3.2), `B-DP2` = c(2.7, 3.4), `B-SCL` = c(2.8, 
3.6), `B-SDA` = c(2.9, 3.8), `B-USB0DN` = 3:4, `B-USB0DP` = c(3.1, 
4.2), `B-USB1DN` = c(3.2, 4.4), `B-USB1DP` = c(3.3, 4.6), `B-ACC1` = c(3.4, 
4.8), `B-ACC2` = c(3.5, 5), `B-ANA0` = c(3.6, 5.2), `B-ANA1` = c(3.7, 
5.4), `B-BRICKID` = c(3.8, 5.6), `B-CC0` = c(3.9, 5.8), `B-CC1` = c(4L, 
6L), `B-DIGDN` = c(4.1, 6.2), `B-DIGDP` = c(4.2, 6.4), `B-DN1` = c(4.3, 
6.6), `B-DN2` = c(4.4, 6.8), `B-DP1` = c(4.5, 7), `B-DP2` = c(4.6, 
7.2), `B-SCL` = c(4.7, 7.4), `B-SDA` = c(4.8, 7.6), `B-USB0DN` = c(4.9, 
7.8), `B-USB0DP` = c(5L, 8L), `B-USB1DN` = c(5.1, 8.2), `B-USB1DP` = c(5.2, 
8.4), `B-NA` = c(5.3, 8.6), `B-ACC2PWRLKG_0v4` = c(5.4, 8.8), 
`B-ACC2PWRLKG_0v4` = c(5.5, 9), `B-P_IN_Leak` = c(5.6, 9.2
)), class = "data.frame", row.names = c(NA, -2L))

数据框2

A-DIODE A-DIODE
1.2     1.3
0.4     0.6

1 个答案:

答案 0 :(得分:4)

我们可以在数据集split.default的子字符串上使用names

split.default(df1, sub("-.*", "", names(df1)))

或者,如果我们知道-之前只有一个字符

split.default(df1, substr(names(df1), 1, 1))
#$A
#  A-DIODE A-DIODE.1
#1     1.2       1.3
#2     0.4       0.6

#$B
#  B-DIODE B-ACC1 B-ACC2 B-ANA0 B-ANA1 B-BRICKID B-CC0 B-CC1 B-DIGDN B-DIGDP B-DN1 B-DN2 B-DP1 B-DP2 B-SCL B-SDA B-USB0DN B-USB0DP
#1     1.4    1.5    1.6    1.7    1.8       1.9     2   2.1     2.2     2.3   2.4   2.5   2.6   2.7   2.8   2.9        3      3.1
#2     0.8    1.0    1.2    1.4    1.6       1.8     2   2.2     2.4     2.6   2.8   3.0   3.2   3.4   3.6   3.8        4      4.2
#  B-USB1DN B-USB1DP B-ACC1.1 B-ACC2.1 B-ANA0.1 B-ANA1.1 B-BRICKID.1 B-CC0.1 B-CC1.1 B-DIGDN.1 B-DIGDP.1 B-DN1.1 B-DN2.1 B-DP1.1 B-DP2.1
#1      3.2      3.3      3.4      3.5      3.6      3.7         3.8     3.9       4       4.1       4.2     4.3     4.4     4.5     4.6
#2      4.4      4.6      4.8      5.0      5.2      5.4         5.6     5.8       6       6.2       6.4     6.6     6.8     7.0     7.2
#  B-SCL.1 B-SDA.1 B-USB0DN.1 B-USB0DP.1 B-USB1DN.1 B-USB1DP.1 B-NA B-ACC2PWRLKG_0v4 B-ACC2PWRLKG_0v4.1 B-P_IN_Leak
#1     4.7     4.8        4.9          5        5.1        5.2  5.3              5.4                5.5         5.6
#2     7.4     7.6        7.8          8        8.2        8.4  8.6              8.8                9.0         9.2