2016-10-01 2 views
2

하나의 열에서 주어진 값의 절반을 선택하고 싶습니다. 나는 아래의 dataframe에서 즉, 열 Y의 행의 절반 주어진 값을 추출해야합니다하나의 열에서 주어진 값의 절반을 선택하십시오.

DF: 
id1 column Y value 
9830  A   6 
7609  A   0 
9925  B   0 
9922  B   5 
9916  B   6 
9917  B   8 
9914  C   2 
9914  C   7 
9914  C   7 
9914  C   2 
9914  C   9 

새로운 데이터 프레임은 다음과 같이한다 : 또한

NEW DF: 
    id1 column Y value 
    9830  A   6 
    9925  B   0 
    9922  B   5 
    9914  C   2 
    9914  C   7 

, 그것은 도움이 될 것입니다 모든 행의 무작위 반을 선택하는 해법을 아는 것 DF 주어진 열 Y (예 : 처음 50 %를 선택하지 않음).

도움을 주시면 감사하겠습니다. 감사합니다.

답변

4

행의 홀수 번호를 우리가 내림, 우리가 사용할 수있는 위치를 column Y에 대해 동일한 값을 가진 행의 각 그룹의 첫 번째 절반을 원하는 가정 filterdplyr에서 :

library(dplyr) 
df %>% group_by(`column Y`) %>% filter(row_number() <= floor(n()/2)) 
##Source: local data frame [5 x 3] 
##Groups: column Y [3] 
## 
## id1 column Y laclen 
## <int> <fctr> <int> 
##1 9830  A  6 
##2 9925  B  0 
##3 9922  B  5 
##4 9914  C  2 
##5 9914  C  7 

우리 첫째 group_bycolumn Y (열 이름에 공백이 포함되어 있으므로 역 따옴표에 유의하십시오.) 2으로 나눈 그룹에 대해 n()에 의해 주어진 전체 행 수인 row_number이 행보다 작거나 같은 열만 ​​유지하려면 floor으로 반올림합니다.).


을 유지하기 위해 행 번호를 생성하는 sample을 사용하여, 각 그룹의 행의 임의의 50 %를 선택하고 %in% 그 유지할 일치 :

set.seed(123) 
result <- df %>% group_by(`column Y`) %>% filter(row_number() %in% sample(seq_len(n()),floor(n()/2))) 
##Source: local data frame [5 x 3] 
##Groups: column Y [3] 
## 
## id1 column Y laclen 
## <int> <fctr> <int> 
##1 9830  A  6 
##2 9922  B  5 
##3 9917  B  8 
##4 9914  C  2 
##5 9914  C  9 
+0

놀라운, 감사합니다! 그리고 처음 50 %가 아닌 50 %의 행을 임의로 선택하는 방법을 알고 있습니까? – Makaroni

+1

@Makaroni : 내 편집을 참조하십시오. – aichao