2017-11-20 1 views
0

Product_Id 및 FrontOfficeUser_Id가 포함 된 데이터 프레임이 있습니다.데이터 프레임을 정렬하는 방법은 무엇입니까?

 Data_Achat=data.frame(ID_Achat,ID_Prod) 
    > Data_Achat[1:10,] 
    ID_Achat ID_Prod 
1  1349  433 
2  1349  405 
3  1349  451 
4  4890  405 
5  4890  405 
6  4890  416 
7  4890  416 
8  4890  388 
9  4890  464 
10  4890  416 

은 그 때 나는 각각 ID_Achat 및 해당 ID_Prod 라인에 새로운 데이터 프레임을 보여주는를 싶어. 다른 말로하면이 예를 들면 다음과 같이하고 싶습니다.

1 1349 433 405 451 
2 4890 405 405 416 416 388 464 416 

어떻게 결과를 얻을 수 있습니까?

감사합니다.

+0

가장 간단한 방법은 아마도'분할 (DF $ ID_Prod, 안양 $ ID_Achat) 그러나 이것은 data.frame 대신리스트를 생성합니다. 왜 당신은 처음에 data.frame에서 그런 형식을 원합니까? –

+0

감사합니다 docendo discimus, –

답변

0

는 여기 data.frame에 데이터를 입력하는 방법은 다음과 같습니다

split_data <- split(df$ID_Prod, df$ID_Achat) 
pasted <- lapply(split_data,paste,collapse=" ") 
as.data.frame(do.call(rbind,pasted)) 
           V1 
1349     433 405 451 
4890 405 405 416 416 388 464 416 

편집

여기에 ID 열 돌아갈 방법은 다음과 같습니다

split_data <- split(df$ID_Prod, df$ID_Achat) 
pasted <- lapply(split_data,paste,collapse=" ") 
df <- as.data.frame(do.call(rbind,pasted)) 
df_final <- cbind(ID_Achat=rownames(df),df) 
colnames(df_final)[2] <- "ID_Prod" 
df_final 

    ID_Achat      ID_Prod 
1349  1349     433 405 451 
4890  4890 405 405 416 416 388 464 416 
+0

감사합니다 @ 피에르 Lapointe,하지만 어떻게 데이터의 첫 번째 열을 추출 할 수 있습니까 ?? 나는 ID가 필요하기 때문에 custumer –

+0

@lmed 나는 ID 컬럼을 추가하기 위해 나의 대답을 편집했다. 기본적으로 행 이름에서 가져옵니다. –

0

피에르가 좋은있다을 대답. 당신은 자신의 열을로 그 각각을 원하는 경우에, 당신은뿐만 아니라이를 사용할 수 있습니다

library(dplyr) 
library(tidyr) 

Data_Achat %>% 
     group_by(ID_Achat) %>% 
     mutate(rn = row_number()) %>% 
     ungroup() %>% 
     spread(rn, ID_Prod) 

편집 :

Data_Achat <- data.frame(ID_Achat = c(rep(1349, 3), rep(4890, 7)), ID_Prod = c(433, 405, 451, 405, 405, 416, 416, 388, 464, 416)) 

    Data_Achat2 <- Data_Achat %>% 
+  group_by(ID_Achat) %>% 
+  mutate(rn = row_number()) %>% 
+  ungroup() %>% 
+  spread(rn, ID_Prod) 

    > Data_Achat2[1,] 
# A tibble: 1 x 8 
    ID_Achat `1` `2` `3` `4` `5` `6` `7` 
    <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> 
1  1349 433 405 451 NA NA NA NA 
+0

감사합니다. Matt,하지만 여기서 문제는 데이터 프레임을 조작하는 것입니다! 예를 들어 내가 Data_Achat [1]을 원하면 다음과 같이 표시합니다. ID_Achat ID_Prod 1 1349 433. 그러나 나는 다음과 같이하고 싶다 : 1 1349 433 405 451 –

+0

그것은 그렇게한다. 당신이 그걸로 무엇이든 할 수 있고 그들 모두를 원 칼럼으로 원하기를 원한다면 NAs도 추가합니다. ID_Prod = c (433, 405, 451, 405, 405, 416, 416, 388, 464, 415) <- Data_Achat %> % + GROUP_BY (ID_Achat) %> % + 돌연변이 (RN = ROW_NUMBER()) %> % + 그룹 해제() %> % + 확산 'Data_Achat2 : 다음 416)) ' (rn, ID_Prod)' 'Data_Achat2 [1,]' –

+0

원본 코드를 게시했을 때 데이터 프레임을 덮어 쓰지 않았다고 생각합니다. –