2

このコード例を検討してください:

d1 <- c(1,2,2,3,4,3)
d2 <- c(10,11,12,13,14,15)

dt <- data.frame(d1,d2)

sample.index <- c(2,3)

dt[dt$d1 %in% sample.index, ]

これは戻ります

  d1 d2
2  2 11
3  2 12
4  3 13
6  3 15

これは問題ありません。しかし、私たちが持っている場合

sample.index <- c(2,2,3)

その場合でも、コードは同じ結果を返します。代わりに、2 が 2 回出現するため、2 に一致する行が 2 回返されるようにしたいのですが、sample.indexどうすればこれを達成できますか?

4

2 に答える 2

5

多分これ:

sample.index <- c(2,2,3)
merge(dt,data.frame(d1 = sample.index))
  d1 d2
1  2 11
2  2 11
3  2 12
4  2 12
5  3 13
6  3 15
于 2013-07-19T19:28:22.593 に答える
1

これは、いくつかのシンタックス シュガーを懇願していdata.tableます (言うまでもなく、より高速になります)。

library(data.table)

d1 <- c(1,2,2,3,4,3)
d2 <- c(10,11,12,13,14,15)

# Note, I set the key to d1
dt <- data.table(d1, d2, key = 'd1')

dt[J(c(2,3))]
#   d1 d2
#1:  2 11
#2:  2 12
#3:  3 13
#4:  3 15

dt[J(c(2,2,3))]
#   d1 d2
#1:  2 11
#2:  2 12
#3:  2 11
#4:  2 12
#5:  3 13
#6:  3 15

data.tableまた、 join とmerge.data.frameresult では、最終的な順序が多少異なることに注意してください。

于 2013-07-19T21:22:47.363 に答える