2017-08-25 5 views
1

まず、data.tableを作成します。data.tableで 'on'を使用する理由は "NA"にすることができます

set.seed(100) 
    a <- data.table(x = sample(c(1:1000),100000,replace = TRUE), 
       y = sample(letters,100000,replace = TRUE), 
       z = 1:100000) 

私は1つの方法a[x >= 900 & y == 'b', .N]を使用し、その結果が、私は第2の方法は、「NA」を作ることができることを見つけるその後389

私は別の方法a[.(c(900:max(x)),'b'), .N, on = .(x,y)]が、結果は394

で使用しています

a[.(c(900:max(x)),'b'), on = .(x,y)][is.na(z)]

WHY?我々はnomatch=0を使用している場合

答えて

3

、NA要素は、その理由は、我々は「X」のmax値に900からシーケンスを取っているということである

a[.(c(900:max(x)),'b'), .N, on = .(x,y), nomatch = 0] 
#[1] 389 

を消えてしまいます。だからいくつかの要素が欠けている。例えば、我々はleftを行っているとして、「Z」のためNA要素になります

a[.(c(900:max(x)),'b'), on = .(x,y)][is.na(z)] 
# x y z 
#1: 948 b NA 
#2: 958 b NA 
#3: 975 b NA 
#4: 984 b NA 
#5: 986 b NA 

が参加します。

理由は、これらの要素がGauss.Y確かに@を組み合わせ

c(948, 958, 975, 984, 986) %in% a[x > 900 & y == "b"][, sort(unique(x))] 
#[1] FALSE FALSE FALSE FALSE FALSE 
+0

のために不足しているということですが、私は 'ポスト – akrun

+1

はい、' [Xの== 948、ユニーク(Y)]を更新し、」 b "は結果にありません。ありがとう! –

関連する問題