2012-07-12 43 views
1

我試圖連接兩個data.tables相同的方式,我將參加與合併(數據幀)與所有= TRUE,就像這樣:加入data.table似乎與被替換值NA的

> x = data.frame(index = 1:10) 
> y = data.frame(index = c(2,4,6), weight = c(0.2, 0.3, 0.5)) 
> x 
    index 
1  1 
2  2 
3  3 
4  4 
5  5 
6  6 
7  7 
8  8 
9  9 
10 10 
> y 
    index weight 
1  2 0.2 
2  4 0.3 
3  6 0.5 
> merge(x,y, all=TRUE) 
    index weight 
1  1  NA 
2  2 0.2 
3  3  NA 
4  4 0.3 
5  5  NA 
6  6 0.5 
7  7  NA 
8  8  NA 
9  9  NA 
10 10  NA 

我有兩個數據表,匹配,權重和鑄造,這是一個演員函數的結果。他們的鑰匙都是「索引」。

> matched.weights 
     index 
[1,]  1 
[2,]  2 
[3,]  3 
[4,]  4 
[5,]  5 
[6,]  6 
[7,]  7 
[8,]  8 
[9,]  9 
[10,] 10 
First 10 rows of 14708 printed. 
> casted 
     index   1   2 
[1,] 10002 0.0049024578 3.057794e-03 
[2,] 10129 0.0011064567 8.481497e-04 
[3,] 10171 0.0012964050 5.540875e-03 
[4,] 10177 0.0008181397 6.981567e-04 
[5,] 10187 0.0060350971 2.156695e-03 
[6,] 1022 0.0011320117 8.665125e-04 
[7,] 10250 0.0047892924 7.725221e-03 
[8,] 10262 0.0044724898 8.787161e-06 
[9,] 10286 0.0016650838 7.162887e-05 
[10,] 10299 0.0015840791 5.578903e-03 
First 10 rows of 305 printed. 

我得到這個錯誤,當我嘗試將它們合併:

> merge(matched.weights, casted, all=TRUE) 
Error in setcolorder(dt, c(setdiff(names(dt), end), end)) : 
    neworder is length 5 but x has 3 columns. 

當我使用data.table語法,它取代NA的數據項:

> merged = casted[matched.weights] 
> merged 
     index X1 X2 
[1,]  1 NA NA 
[2,]  2 NA NA 
[3,]  3 NA NA 
[4,]  4 NA NA 
[5,]  5 NA NA 
[6,]  6 NA NA 
[7,]  7 NA NA 
[8,]  8 NA NA 
[9,]  9 NA NA 
[10,] 10 NA NA 
First 10 rows of 14708 printed. 
> merged[10002] 
    index X1 X2 
[1,] 10002 NA NA 
> sum(merged[[2]], na.rm=T) 
[1] 0 

燦有誰向我解釋發生了什麼事?

+0

這是預期的行爲。你應該使用'merge'來代替。 – Andrie 2012-07-12 14:06:37

+0

@Andrie但是OP在merge中遇到錯誤。 – 2012-07-12 14:09:36

+0

我想我們讀的是不同的問題。我會發佈一個答案。 – Andrie 2012-07-12 14:13:29

回答

1

如果你想merge兩個數據表(在全外的意識加盟,類似於all=TRUE),你需要使用merge.data.table

library(data.table) 
dtx <- data.table(x, key="index") 
dty <- data.table(y, key="index") 
merge(dtx,dty, all=TRUE) 
    index weight 
1  1  NA 
2  2 0.2 
3  3  NA 
4  4 0.3 
5  5  NA 
6  6 0.5 
7  7  NA 
8  8  NA 
9  9  NA 
10 10  NA 

這是你使用時,作爲同樣的結果數據幀(但速度要快得多)。

值得注意的是merge的某些功能在data.table的最新版本中得到了改進,因此請務必獲得最新的穩定版本。我正在使用1.8.0版本。