我有一个excel文件,其中10000行乘以7列,并且需要根据特定的列进行拆分,并将10000 * 7拆分为n * 7个集合中的n个,并且所有集合都应位于单个数据帧中,并且集合大小不一样。并应根据特定的列名附加列名
我具有excel.xlsx格式的示例数据如下所示:
C1.xlsx (worksheet:C_1)
A B C D E
1 4 6 8 C_1
3 56 7 8 C_1
2 4 6 1 C_1
2 4 6 1 C_2
2 3 6 8 C_2
7 8 3 4 C_2
2 3 6 8 C_2
1 4 6 8 C_2
2 3 5 6 C_2
3 4 6 7 C_2
1 9 6 1 C_2
3 4 2 7 C_3
2 1 5 1 C_3
所需的Excel工作表应如下所示
C1splitted.xlsx (worksheet: sheet 1)
C_1.A C_1.B C_1.C C_1.D C_1.E C_2.A C_2.B C_2.C C_2.D C_2.E C_3.A C_3.B C_3.C C_3.D C_3.E
1 4 6 8 C_1 2 4 6 1 C_2 3 4 2 7 C_3
3 56 7 8 C_1 2 3 6 8 C_2 2 1 5 1 C_3
2 4 6 1 C_1 7 8 3 4 C_2
2 3 6 8 C_2
1 4 6 8 C_2
2 3 5 6 C_2
3 4 6 7 C_2
1 9 6 1 C_2
但是我如下所示使用的代码不适用于划分具有不同行数的列
wide<-cbind(C_1[C_1$E =="C_1",],C_1[C_1$E=="C_2",], C_1[C_1$E=="C_3",])
我使用的代码存在以下问题 1.我们需要在指定列中具体提及类数, 2.命名列名
我正在寻找代码以所需格式获取数据
预先感谢
答案 0 :(得分:0)
简单的方法是使用split()
:
split(DF[, -5], DF[, 5])
$C_1
A B C D
1 1 4 6 8
2 3 56 7 8
3 2 4 6 1
$C_2
A B C D
4 2 4 6 1
5 2 3 6 8
6 7 8 3 4
7 2 3 6 8
8 1 4 6 8
9 2 3 5 6
10 3 4 6 7
11 1 9 6 1
$C_3
A B C D
12 3 4 2 7
13 2 1 5 1
如果您对格式类似的项目列表感兴趣,stack()
可以协助完成该过程:
#reshape to long
stacked = data.frame(E = DF[, 5], stack(DF[, -5]))
#unite the "C_1, C_2, C3" field with the "A, B, C, ..." field
stacked$split_ind = paste0(stacked$E, '.', stacked$ind)
#split
split(stacked[, 2], stacked$split_ind)
$C_1.A
[1] 1 3 2
$C_1.B
[1] 4 56 4
$C_1.C
[1] 6 7 6
$C_1.D
[1] 8 8 1
$C_2.A
[1] 2 2 7 2 1 2 3 1
$C_2.B
[1] 4 3 8 3 4 3 4 9
$C_2.C
[1] 6 6 3 6 6 5 6 6
$C_2.D
[1] 1 8 4 8 8 6 7 1
$C_3.A
[1] 3 2
$C_3.B
[1] 4 1
$C_3.C
[1] 2 5
$C_3.D
[1] 7 1
答案 1 :(得分:0)
要获得问题中提到的所需输出,我执行了以下过程
步骤1:
使用以下命令将数据框拆分为列表
> split(DF[, -5], DF[, 5])
步骤2:
然后使用以下代码将字符串添加到列表的名称
> colnames <- c("ABC", "AA", "BB", "CC", "DD")
> for (i in seq_along(DF)){
colnames(DF[[i]]) <- paste0(names(DF[i]), colnames)
}
第3步:
然后可以使用qpcR库将大小不等的列表合并到单个数据框中,如下所示:
> library(qpcR) ## required for combining multiple dataframes from a lists
> sample2 <- do.call(qpcR:::cbind.na, DF) # combines multiple dataframes in a list by column vise irrespective of row sizes