Tôi đang cố gắng xóa các hàng trong một data.frame
trong đó giá trị trong cột posn
không nằm trong phạm vi được đưa ra trong một data.frame
khác, với tính năng kết nối không tham gia của data.table
.Làm cách nào để giữ cột tham gia không thay đổi trong dữ liệu tham gia không tham gia?
Sau đây là cách dữ liệu của tôi trông giống như:
library(data.table)
df.cov <-
structure(list(posn = c(1, 2, 3, 165, 1000), att = c("a", "b",
"c", "d", "e")), .Names = c("posn", "att"), row.names = c(NA,
-5L), class = "data.frame")
df.exons <-
structure(list(start = c(2889, 2161, 277, 164, 1), end = c(3329,
2826, 662, 662, 168)), .Names = c("start", "end"), row.names = c(NA,
-5L), class = "data.frame")
setDT(df.cov)
setDT(df.exons)
df.cov
# posn att
# 1: 1 a
# 2: 2 b
# 3: 3 c
# 4: 165 d
# 5: 1000 e
df.exons # ranges of `posn` to include
# start end
# 1: 2889 3329
# 2: 2161 2826
# 3: 277 662
# 4: 164 662
# 5: 1 168
Đây là những gì tôi đã cố gắng:
df.cov[df.exons, on = .(posn >= start, posn <= end), nomatch = 0]
# posn att posn.1
# 1: 164 d 662
# 2: 1 a 168
# 3: 1 b 168
# 4: 1 c 168
# 5: 1 d 168
Bạn có thể thấy rằng posn
cột trong df.cov
cũng được thay đổi. Kết quả mong đợi trông như sau:
# posn att
# 1: 165 d
# 2: 1 a
# 3: 2 b
# 4: 3 c
# 5 165 d
# the row order doesn't matter. I'll sort by posn latter.
# It is also fine if the duplicated rows are removed, otherwise I'll do this in next step.
Làm cách nào để có được kết quả mong muốn với data.table
không tham gia?
'df.cov [df.cov [df.exons, trên = (posn> = bắt đầu, posn <= kết thúc), nomatch = 0, trong đó = TRUE]] 'Tôi đã đệ đơn FR cho loại đăng ký này https://github.com/Rdatatable/data.table/issues/2158 (không chắc chắn liệu điều đó có hợp lý hay không, vì không ai có trả lời cho nó được nêu ra). Để loại bỏ các bản dupes, chỉ cần áp dụng 'unique' cho vector' which' trước khi subsetting. – Frank
Tôi đã hỏi một câu hỏi có liên quan một chút trước đây: [Sử dụng 'j' để chọn cột nối của' x' và tất cả các cột không tham gia của nó] (https://stackoverflow.com/questions/42329157/use-j- to-select-the-join-column-of-x-và-tất-cả-số-không-tham-cột) – Henrik
@Frank, cảm ơn. Dưới đây là những gì tôi cuối cùng đã dựa trên của bạn: 'df.cov [sắp xếp (duy nhất (df.cov [df.exons, trên =. (Posn> = bắt đầu, posn <= end), nomatch = 0, mà = TRUE]))] '. Tôi đọc FR của bạn và tôi nghĩ rằng một tính năng như vậy sẽ thực sự hữu ích trong nhiều trường hợp như thế này. – mt1022