R data.table也会删除一些列的唯一行

时间:2015-05-27 14:27:37

标签: r data.table

如何从data.table中获取唯一行还从结果中删除一些列,其中唯一性由多于一列的值定义?例如:

tbl = data.table( 
  reader_id = c(10,20,20,30,50), 
  book_id = c(1,2,2,4,5), 
  date = c('d1','d2','d3','d4','d5'),
  inf = c('i1','i2','i3','i4','i5')
  )

 >tbl
   reader_id book_id date inf
1:        10       1   d1  i1
2:        20       2   d2  i2
3:        20       2   d3  i3
4:        30       4   d4  i4
5:        50       5   d5  i5

ut = unique(tbl[c(reader_id, book_id)])

结果我得到了:

   reader_id book_id date inf
1:        NA      NA   NA  NA
2:        10       1   d1  i1
3:        20       2   d2  i2
4:        30       4   d4  i4
5:        50       5   d5  i5

问题:

  1. 为什么结果有NA值?如何摆脱它们?
  2. 如何从结果中删除inf列?
  3. 改为:

       reader_id book_id date 
    1:        10       1   d1  
    2:        20       2   d2  
    3:        30       4   d4  
    4:        50       5   d5 
    

2 个答案:

答案 0 :(得分:3)

这个怎么样:

R> unique(tbl, by=c("reader_id", "book_id"))[,-4,with=F]
#    reader_id book_id date
# 1:        10       1   d1
# 2:        20       2   d2
# 3:        30       4   d4
# 4:        50       5   d5

或者,如果您希望按姓名删除,

unique(tbl,by=c("reader_id", "book_id"))[,!"inf",with=F]

答案 1 :(得分:-1)

tbl[,.SD[1],by=c('reader_id','book_id')]