데이터 프레임을 분할하는 방법?
데이터 프레임을 여러 개의 작은 프레임으로 나누고 싶습니다.이것은 아주 사소한 질문처럼 보이지만, 저는 웹 검색에서 해결책을 찾을 수 없습니다.
데이터 프레임을 임의 수의 더 작은 데이터 프레임으로 잘라낼 수도 있습니다.여기서는 두 개의 데이터 프레임으로 자릅니다.
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)
만약 당신이 어떤 변수의 값에 따라 데이터 프레임을 분할하기를 원한다면, 나는 다음을 사용하는 것을 제안합니다.daply()로부터plyr꾸러미의
library(plyr)
x <- daply(df, .(splitting_variable), function(x)return(x))
지금이다,x는 데이터 프레임의 배열입니다.데이터 프레임 중 하나에 액세스하려면 분할 변수의 수준 이름과 함께 인덱스를 지정할 수 있습니다.
x$Level1
#or
x[["Level1"]]
데이터를 여러 개의 데이터 프레임으로 분할하기 전에 이보다 더 현명한 방법은 없을 것입니다.
사용할 수도 있습니다.
data2 <- data[data$sum_points == 2500, ]
이렇게 하면 sum_points = 2500인 값으로 데이터 프레임이 만들어집니다.
다음을 제공합니다.
airfoils sum_points field_points init_t contour_t field_t
...
491 5 2500 5625 0.000086 0.004272 6.321774
498 5 2500 5625 0.000087 0.004507 6.325083
504 5 2500 5625 0.000088 0.004370 6.336034
603 5 250 10000 0.000072 0.000525 1.111278
577 5 250 10000 0.000104 0.000559 1.111431
587 5 250 10000 0.000072 0.000528 1.111524
606 5 250 10000 0.000079 0.000538 1.111685
....
> data2 <- data[data$sum_points == 2500, ]
> data2
airfoils sum_points field_points init_t contour_t field_t
108 5 2500 625 0.000082 0.004329 0.733109
106 5 2500 625 0.000102 0.004564 0.733243
117 5 2500 625 0.000087 0.004321 0.733274
112 5 2500 625 0.000081 0.004428 0.733587
나는 방금 당신에게 도움이 될 수 있는 일종의 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
건배, 세바스찬
원하는 대답은 데이터 프레임을 어떻게, 왜 분리할 것인지에 따라 달라집니다.
예를 들어 일부 변수를 제외하려는 경우 데이터베이스의 특정 열에서 새 데이터 프레임을 생성할 수 있습니다.데이터 프레임 뒤의 괄호는 행과 열 번호를 나타냅니다.자세한 설명은 Spoetry를 확인하십시오.
newdf <- mydf[,1:3]
또는 특정 행을 선택할 수 있습니다.
newdf <- mydf[1:3,]
또한 이러한 첨자는 특정 값을 포함하는 행을 선택하거나 원하는 값을 가지는 요인을 선택하는 등의 논리적 검정이 될 수도 있습니다.
남은 덩어리는 어떻게 하실 건가요?데이터베이스의 각 청크에 대해 동일한 작업을 수행해야 합니까?그러면 데이터 프레임의 하위 집합이 데이터 프레임의 각 청크에서 동일한 명령을 수행하는 데 도움이 되는 목록과 같은 편리한 개체로 끝나도록 해야 합니다.
subset()또한 유용합니다.
subset(DATAFRAME, COLUMNNAME == "")
설문조사 패키지의 경우, 아마도survey패키지가 적절한가요?
http://faculty.washington.edu/tlumley/survey/
열 중 하나의 값으로 분할하려면 다음을 사용할 수 있습니다.lapply. 예를 들면, 쪼개기.ChickWeight각 로:
data(ChickWeight)
lapply(unique(ChickWeight$Chick), function(x) ChickWeight[ChickWeight$Chick == x,])
데이터 프레임을 분할하는 것은 생산성이 떨어지는 것 같습니다.대신 분할 적용-결합 패러다임을 사용합니다. 예를 들어 데이터를 생성합니다.
df = data.frame(grp=sample(letters, 100, TRUE), x=rnorm(100))
하여 합니다.scale()각 하고 결과를 에서 x다)).split<-아니면ave)
df$z = 0
split(df$z, df$grp) = lapply(split(df$x, df$grp), scale)
## alternative: df$z = ave(df$x, df$grp, FUN=scale)
이는 data.frame을 분할하는 것에 비해 매우 빠르며 결과는 반복하지 않고 다운스트림 분석에서 사용할 수 있습니다.dplayer 구문은
library(dplyr)
df %>% group_by(grp) %>% mutate(z=scale(x))
일반적으로 이 dplyer 솔루션은 데이터 프레임을 분할하는 것보다 빠르지만 분할 적용 결합보다는 빠르지 않습니다.
언급URL : https://stackoverflow.com/questions/3302356/how-to-split-a-data-frame
'programing' 카테고리의 다른 글
| 웹팩으로 실제 Window 개체에 jQuery 노출 (0) | 2023.09.19 |
|---|---|
| 체인 매는 법 각진컨트롤러의 JS 필터 (0) | 2023.09.19 |
| Python 3의 문에 SQL 삽입을 위한 구문 형식 지정 (0) | 2023.09.19 |
| 카테고리 ID별로 제품 가져오기 (0) | 2023.09.19 |
| 로컬 파일을 덮어쓰지 않고 원격에서 파일을 꺼내려면 어떻게 해야 합니까? (0) | 2023.09.19 |