假设具有7个因子(name_ttl
)的变量,每个因子具有被value_ttl_ben
描述的观察概率(基于训练集)。现在,假设有一个新观察的向量(New_DNS
)。我想将向量的第四个值(即5)与因子级别" 5"的概率值相匹配。 (即与矢量的特定值匹配的级别)。
这就是我想出来的,但我想知道如何才能提高效率。
value_ttl_ben <- c(0.1428571, 0.2200000, 0.3928571, 0.1214286, 0.0785714, 0.0428571, 0.0014287)
name_ttl <- c("1", "2", "3", "4", "5", "6", "7")
BENIGN_TTL <- data.frame(Name=name_ttl, Amount=value_ttl_ben)
New_DNS <-c(36, 4, 3, 5, 4.68, 1.0056)
test1 <- as.matrix(BENIGN_TTL)
d <- NULL
for (i in 1:length(New_DNS[New_DNS %in% BENIGN_TTL$Name]))
{
pos<-match(New_DNS[New_DNS %in% BENIGN_TTL$Name][i],test1)
d<-c(d,test1[pos,2])
d <- as.numeric(d)
}
ttlb <- d[3]
答案 0 :(得分:2)
您正在寻找的是所谓的inner join
,可以通过data.table
包来实现。
library(data.table)
value_ttl_ben <- c(0.1428571, 0.2200000, 0.3928571, 0.1214286, 0.0785714, 0.0428571, 0.0014287)
name_ttl <- 1:7
dt_benign_ttl <- data.table(Name = name_ttl, Amount = value_ttl_ben)
dt_new_dns <- data.table(Name = c(36, 4, 3, 5, 4.68, 1.0056))
# inner join merge
new_dt_new_dns <- merge(dt_benign_ttl, dt_new_dns, by = "Name")
new_dt_new_dns # contains the new DNS data in name and then adds the Amount from the dt_benign_ttl
# Name Amount
# 1: 3 0.3928571
# 2: 4 0.1214286
# 3: 5 0.0785714
如果您将d
- 变量(按New_DNS[New_DNS %in% BENIGN_TTL$Name]
重新排序)与我的new_dt_new_dns$Amount
进行比较,您应该会看到相同的结果。
这能为您提供您想要/需要的东西吗?
答案 1 :(得分:2)
您可以使用%in%
来自BENIGN_TTL的子集。
value_ttl_ben <- c(0.1428571, 0.2200000, 0.3928571, 0.1214286, 0.0785714, 0.0428571, 0.0014287)
name_ttl <- c("1", "2", "3", "4", "5", "6", "7")
BENIGN_TTL <- data.frame(Name=name_ttl, Amount=value_ttl_ben)
New_DNS <-c(36, 4, 3, 5, 4.68, 1.0056)
d<-BENIGN_TTL[BENIGN_TTL$Name %in% New_DNS,2]