无法获得好的头衔,希望以下内容能解释我之后所做的事情。对于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
答案 0 :(得分:0)
对于dtRandom中的每一行,我想知道dtFamilies中有多少行符合最大和最小猫和狗的标准。
以这种方式:
#!/usr/bin/tclsh
puts [exec ./t1]
puts "exit tcl"
工作原理
要根据不等式与另一个表中的变量选择行,我们需要一个非等式连接:
DT[dtRandom, on=.(Dogs >= DogsMin, Dogs <= DogsMax, Cats >= CatsMin, Cats <= CatsMax),
.N, by=.EACHI]
要计算符合某些条件的行,我们可以使用DT[dtRandom, on=.(Dogs >= DogsMin, Dogs <= DogsMax, Cats >= CatsMin, Cats <= CatsMax)]
。
使用.N
,我们会为by=.EACHI
中i
的每一行计算此计数。
有关详细信息,请参阅x[i, on, j, by=.EACHI]
。