簡體   English   中英

R查找data.table數據和data.table隨機值之間的匹配

[英]R Find matches between a data.table of data and a data.table of random values

無法想出好的頭銜,希望以下內容能解釋我所追求的目標。 對於dtRandom中的每一行,我想知道dtFamilies中有多少行符合最大和最小貓和狗的標准。

require(data.table)
dtFamilies <- data.table(Family=c('Smith','Jones','White','Harris'),
                 Dogs=c(7,0,2,1),
                 Cats=c(0,3,0,8))

lowDogs <- min(DT[,Dogs])
highDogs <- max(DT[,Dogs])
lowCats <- min(DT[,Cats])
highCats <- max(DT[,Cats])

set.seed(1)
DogsMin <- sample(lowDogs:highDogs,10,replace = T)
DogsMax <- sample(lowDogs:highDogs,10,replace = T)
CatsMin <- sample(lowCats:highCats,10,replace = T)
CatsMax <- sample(lowCats:highCats,10,replace = T)

dtRandom <- data.table(DogsMin,DogsMax,
                       CatsMin,CatsMax)

dtRandom <- transform(dtRandom,
                 DogsMin = ifelse(DogsMin < DogsMax, DogsMin, DogsMax), DogsMax = ifelse(DogsMax > DogsMin, DogsMax, DogsMin),
                 CatsMin = ifelse(CatsMin < CatsMax, CatsMin, CatsMax), CatsMax = ifelse(CatsMax > CatsMin, CatsMax, CatsMin))


# I now have dtFamilies which is a list of families and the number of dogs and cats that they have.
# I also have dtRandom which has 10 rows of random values for min and max number of pets

# Below obviously does not work
    nrow(DT[Dogs >= DogsMin & Dogs <= DogsMax &
    Cats >= CatsMin & Cats <= CatsMax]))

對於dtRandom中的每一行,我想知道dtFamilies中有多少行符合最大和最小貓和狗的標准。

我是R的新手,有很多功能我不知道如何申請。 一些指導非常感謝。 我有使用循環的功能,但我一直在讀R中的循環不好,應該使用R方法。

我想要的例子(只是一個例子 - 這與上面的數據不匹配):

    DogsMin DogsMax CatsMin CatsMax Matches
1:       0       5       3       6    1
2:       6       6       2       3    0
3:       1       7       2       7    2
4:       1       4       4       6    1
5:       6       6       0       7    3
6:       5       6       4       4    0
7:       2       5       4       8    4
8:       2       3       2       4    0
9:       1       5       3       4    1
10:      0       4       1       5    1

對於dtRandom中的每一行,我想知道dtFamilies中有多少行符合最大和最小貓和狗的標准。

這是一種方式:

DT[dtRandom, on=.(Dogs >= DogsMin, Dogs <= DogsMax, Cats >= CatsMin, Cats <= CatsMax),
  .N, by=.EACHI]

這個怎么運作

要根據不等式與另一個表中的變量選擇行,我們需要一個非equi連接:

DT[dtRandom, on=.(Dogs >= DogsMin, Dogs <= DogsMax, Cats >= CatsMin, Cats <= CatsMax)]

要計算符合某些條件的行,我們可以使用.N

使用by=.EACHI我們計算x[i, on, j, by=.EACHI]每行i這個計數。

有關詳細信息,請參閱?data.table

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM