Как разбить фрейм данных на фреймы данных неравного размера в одном фрейме данных - PullRequest
0 голосов
/ 29 сентября 2019

У меня есть файл Excel с 10000 строками на 7 столбцов, и мне нужно разделить на основе определенного столбца и разделить 10000 * 7 на несколько n из n * 7 наборов, и все наборы должны быть в одном фрейме данных и размеров наборане то же самое.и имена столбцов должны быть добавлены на основе конкретного имени столбца

. Образцы данных, которые у меня есть в формате 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. назвать имена столбцов

я ищу код для получения данных в желаемом формате

заранее спасибо

1 Ответ

0 голосов
/ 29 сентября 2019

Простой подход заключается в использовании 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...