Как разделить кадр данных?

Я хочу разделить кадр данных на несколько меньших. Это похоже на очень тривиальный вопрос, однако я не могу найти решение от веб-поиска.

68
задан josliber 21 March 2016 в 14:07
поделиться

5 ответов

Вы также можете захотеть разрезать фрейм данных на произвольное количество меньших фреймов данных. Здесь мы разрезаем на два фрейма данных.

x = data.frame(num = 1:26, let = letters, LET = LETTERS)
set.seed(10)
split(x, sample(rep(1:2, 13)))

дает

$`1`
   num let LET
3    3   c   C
6    6   f   F
10  10   j   J
12  12   l   L
14  14   n   N
15  15   o   O
17  17   q   Q
18  18   r   R
20  20   t   T
21  21   u   U
22  22   v   V
23  23   w   W
26  26   z   Z

$`2`
   num let LET
1    1   a   A
2    2   b   B
4    4   d   D
5    5   e   E
7    7   g   G
8    8   h   H
9    9   i   I
11  11   k   K
13  13   m   M
16  16   p   P
19  19   s   S
24  24   x   X
25  25   y   Y

Вы также можете разделить фрейм данных на основе существующего столбца. Например, чтобы создать три фрейма данных на основе столбца cyl в mtcars :

split(mtcars,mtcars$cyl)
57
ответ дан 24 November 2019 в 14:17
поделиться

Нужный вам ответ во многом зависит от того, как и зачем вы хотите разбить кадр данных.

Например, если вы хотите исключить некоторые переменные, вы можете создать новые рамки данных из определенных столбцов базы данных. Подписи в скобках после рамки данных означают номера строк и столбцов. Полное описание смотрите в Spoetry.

newdf <- mydf[,1:3]

Или вы можете выбрать определенные строки.

newdf <- mydf[1:3,]

И эти подзаписи также могут быть логическими тестами, например, выбрать строки, содержащие определенное значение, или коэффициенты с желаемым значением.

Что вы хотите сделать с оставшимися кусками? Нужно ли вам выполнить одну и ту же операцию над каждым куском базы данных? Тогда вам нужно обеспечить, чтобы подмножества блока данных оказались в удобном объекте, таком как список, который поможет вам выполнить одну и ту же команду над каждым блоком блока данных.

4
ответ дан 24 November 2019 в 14:17
поделиться

subset () также полезно:

subset(DATAFRAME, COLUMNNAME == "")

Для пакета обзора, может быть, уместен пакет survey ?

http: / /faculty.washington.edu/tlumley/survey/

7
ответ дан 24 November 2019 в 14:17
поделиться

Если вы хотите разделить фрейм данных в соответствии со значениями какой-либо переменной, я бы предложил использовать daply () из пакета plyr .

library(plyr)
x <- daply(df, .(splitting_variable), function(x)return(x))

Теперь x - это массив фреймов данных. Чтобы получить доступ к одному из фреймов данных, вы можете проиндексировать его по имени уровня переменной разделения.

x$Level1
#or
x[["Level1"]]

Я был бы уверен, что нет других более умных способов справиться с вашими данными, прежде чем разбивать их на множество фреймов данных.

19
ответ дан 24 November 2019 в 14:17
поделиться

Я только что опубликовал что-то вроде RFC, которое может вам помочь: Разделить вектор на куски в R

x = data.frame(num = 1:26, let = letters, LET = LETTERS)
## number of chunks
n <- 2
dfchunk <- split(x, factor(sort(rank(row.names(x))%%n)))
dfchunk
$`0`
   num let LET
1    1   a   A
2    2   b   B
3    3   c   C
4    4   d   D
5    5   e   E
6    6   f   F
7    7   g   G
8    8   h   H
9    9   i   I
10  10   j   J
11  11   k   K
12  12   l   L
13  13   m   M

$`1`
   num let LET
14  14   n   N
15  15   o   O
16  16   p   P
17  17   q   Q
18  18   r   R
19  19   s   S
20  20   t   T
21  21   u   U
22  22   v   V
23  23   w   W
24  24   x   X
25  25   y   Y
26  26   z   Z

Спасибо, Себастьян

11
ответ дан 24 November 2019 в 14:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: