2016-10-21 5 views
1

それぞれ5つのx値(A、B、C、D、E)を持つ10の変数(ID1 - 1D10) :私は単に持っている。このデータフレームからの行のみをつかむしようとしていますRに特定の列値を持つ行を選択すると、結果に行がありません

x variable  value 
1: A  ID1 0.2655087 
2: B  ID1 0.2059746 
3: C  ID1 0.9347052 
4: D  ID1 0.4820801 
5: E  ID1 0.8209463 
6: A  ID2 0.3721239 
7: B  ID2 0.1765568 

library(plotly) 
library(data.table) 

set.seed(1) 
dat <- data.frame(ID = paste0("ID",1:10), A = runif(10), B = runif(10), C = runif(10), D = runif(10), E = runif(10)) 
dat$ID <- as.character(dat$ID) 
datt <- data.frame(t(dat)) 
names(datt) <- as.matrix(datt[1, ]) 
datt <- datt[-1, ] 
datt[] <- lapply(datt, function(x) type.convert(as.character(x))) 
setDT(datt, keep.rownames = TRUE)[] 
colnames(datt)[1] <- "x" 
dat_long <- melt(datt, id.vars ="x") 

これは、次の形式(これはそれの最初の7行である)でデータフレームを作成し、 ID1またはID2の可変値。これは10行になります(各IDは5つのx値A、B、C、D、Eを持つため)。ただし、実行時に:

dat_long[dat_long$variable==c("ID1","ID2"),] 

私は6行しか受け取りません。具体的には、私は5のxの値(A、C、E)の3を受け取る:

x variable  value 
1: A  ID1 0.2655087 
2: C  ID1 0.9347052 
3: E  ID1 0.8209463 
4: A  ID2 0.3721239 
5: C  ID2 0.2121425 
6: E  ID2 0.6470602 

Iは次のように文字に因子からのデータフレームの変数列を変更しようとした:

しかし、これとまったく同じ問題が発生します。 which()コマンドを実行すると、同じ問題が引き続き発生します。

この問題を解決する方法はありますか?私が行うとき:

str(c("ID1","ID2")) 

私は、次を得る:

chr [1:2] "ID1" "ID2" 

私はおそらくすぐに上記の形式でのIDの鍵を維持する必要があります。理由は、Shinyアプリケーションを使用しているため、IDキーの入力値はこの形式です。 IDキーは、異なる組み合わせと数字である場合もあります。たとえば、入力には3つのID(例:c( "ID1"、 "ID2"、 "ID5"))があります。したがって、私は上記の形式の文字配列をIDキーとして使用して解決策を導き出す必要があります。

アドバイスをいただければ幸いです!

+2

を... '%%で、C( "ID1"、 "ID2")' – bergant

答えて

1

@bergantは、%in%演算子を使用することをお勧めします。そうしないとあなたがdata.tableを利用したい場合、あなたは非常に迅速に使用してそれを見ることができる:

setkey(dat_long,variable) 
dat_long[J(c("ID1","ID2"))] 

    x variable  value 
1: A  ID1 0.2655087 
2: B  ID1 0.2059746 
3: C  ID1 0.9347052 
4: D  ID1 0.4820801 
5: E  ID1 0.8209463 
6: A  ID2 0.3721239 
7: B  ID2 0.1765568 
8: C  ID2 0.2121425 
9: D  ID2 0.5995658 
10: E  ID2 0.6470602 
関連する問題