2017-12-24 2 views
0

큰 데이터 프레임 (50 개 이상의 열)이 있습니다. 각 열을 다른 순서로 가져오고 데이터 프레임에 새 행을 추가해야하지만이 새로운 행은 오른쪽 열을 업데이트해야합니다. 예를 들어 큰 데이터 프레임을 R의 열에 따라 새 항목으로 업데이트하십시오.

, 내가 가지고 df :

col6 col2 col5 col4 col3 col1 col7 col10 col9 col8 ......... 
R re3 666 Rino Pino 33 ddd no 55874 6 

내가 가 나는 또한 사용할 수에 대한 dplyr는 이름과 업데이트로 arrange에 기능을 주선 생각 :

col1 col2 col3 col4 col5 col6 col7 col8 col9 col10 ......... 
1 a Don Lu 854 W eee 1 1234 yes 
4 s34 Dino Ken 44 S aaa 1 3432 no 
5 1ee Pupu Dar 2215 R bbb -4 12121 yes 

내가 새 항목을 얻을 $ 각각을 업데이트하려면 모범 사례가 무엇인지 알려주십시오.

답변

1

새 항목을 Asumming 것은이 data.frame()df1라고, 나는 data.table 패키지에서 rbindlist()를 사용하는 것입니다.

merged <- list(df, df1) 
rbindlist(merged, fill = TRUE) 

은 매우 빠르게 작업을 수행합니다. 사실, 당신이 list

merged <- list(df1, df2, ...... , df99999, df100000) 
rbindlist(merged, fill = TRUE) 

에서 원하는 많은 항목을 넣을 수 있습니다 꽤 빨리 일을한다.

df1에있는 어떤 항목도 df이 아니며 그 반대 인 경우 NA이됩니다.

+0

저는 이것을 지금 시도 할 것입니다, 많이 감사합니다 !!! –

2

merge()을 사용하고 allTRUE으로 설정할 수 있습니다. 시도

df <- read.table(text = "col1 col2 col3 col4 col5 col6 col7 col8 col9 col10 
       1 a Don Lu 854 W eee 1 1234 yes 
       4 s34 Dino Ken 44 S aaa 1 3432 no 
       5 1ee Pupu Dar 2215 R bbb -4 12121 yes", header=TRUE) 
new.entry <- read.table(text = "col6 col2 col5 col4 col3 col1 col7 col10 col9 col8 
           R re3 666 Rino Pino 33 ddd no 55874 6", header = TRUE) 

merge(df, new.entry, all = TRUE) 
# col1 col2 col3 col4 col5 col6 col7 col8 col9 col10 
# 1 a Don Lu 854 W eee 1 1234 yes 
# 4 s34 Dino Ken 44 S aaa 1 3432 no 
# 5 1ee Pupu Dar 2215 R bbb -4 12121 yes 
# 33 re3 Pino Rino 666 R ddd 6 55874 no 
+0

시도해 보았습니다. 작동하지 않습니다. 예제를 게시 할 수 있습니까? –

+2

이것이 가장 현명한 대답이지만 효율면에서 최적이 아닐 수도 있습니다. – InfiniteFlashChess

+0

다른 해결책이 있습니까? –

1

dplyr의 bind_rows()도 작동해야합니다.

data <- data.frame(x = rep("ABC", 3), y = 1, z = 0) 
data1 <- data.frame(y = 2, x = rep("XX", 4)) 
datax <- bind_rows(data, data1) 
관련 문제