2016-06-05 10 views
2

:R : 4 × 2 데이터 프레임 등을 감안할 때 확장 dataframe 행

df <- 
    data.frame(
    X=c(1,3,6,10), 
    Y=c('A','K','K3', 'K')) 

가 나는 10x2 행 dataframe이 X 1,2입니다 있었다 좀하고 싶습니다 ... (10) (1:10 등)

,369 :

X Y 
1 1 A 
2 2 A 
3 3 K 
4 4 K 
5 5 K 
6 6 K3 
7 7 K3 
8 8 K3 
9 9 K3 
10 10 K 

은 내가 (의사) 같은 'df' 통해 반복에 의해 Y을 구축하는 것입니다 생각할 수있는 생각 : 및 Y는 안양 $ x에 지정된 횟수, 예를 복제

for(i in 1:(nrow(df)-1)){ 
    Y <- c(Y,(rep.int(df$Y[i], df$X[i+1]-df$X[i])))} 

울퉁불퉁 한 것처럼 보입니다. 어쩌면 reshape2 또는 splitstackshape 같은 패키지가 도움이 될까요?

+1

당신은 또한 다음'할 splitstackshape :: expandRows (DF, C (차이 (안양 $의 X), 1), FALSE)'와 수 사용하거나 수 something –

+0

또는 기본 R 옵션'transform (df [rep (1 : nrow (df), c (diff (df $ X), 1))]], X = seq (max (df $ X))) ' – akrun

답변

1

우리는`X` 열을 수정 dplyr

library(dplyr) 
library(tidyr) 
data.frame(X= min(df$X):max(df$X)) %>% 
     left_join(., df, by = "X") %>% 
     fill(Y) 
# X Y 
#1 1 A 
#2 2 A 
#3 3 K 
#4 4 K 
#5 5 K 
#6 6 K3 
#7 7 K3 
#8 8 K3 
#9 9 K3 
#10 10 K 
+1

완전한. 나는 tidyr를 잊었다. – user3375672

+2

또는 % df %> % 완료 (X = full_seq (최소 (X) : 최대 (X), 1)) %> % 채우기 (Y)' –