R语言中基于循环的代码修改
假设一个变量有7个因子(R语言中基于循环的代码修改,r,R,假设一个变量有7个因子(name\u ttl),每个因子都有被观察到的概率,如value\u ttl\u ben所述(基于训练集)。现在,假设出现了一个新观测向量(new\u DNS)。我想将向量的第四个值(即5)与因子级别“5”的概率值(即匹配向量特定值的级别)匹配。 这是我想到的,但我想知道如何才能使这更有效 value_ttl_ben <- c(0.1428571, 0.2200000, 0.3928571, 0.1214286, 0.0785714, 0.0428571, 0.00
name\u ttl
),每个因子都有被观察到的概率,如value\u ttl\u ben
所述(基于训练集)。现在,假设出现了一个新观测向量(new\u 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]
value\u ttl\u ben您正在寻找的是所谓的内部联接
,可以通过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
库(data.table)
value\u ttl\u ben您正在寻找的是所谓的内部联接
,它可以通过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
库(data.table)
值\u ttl\u ben您可以使用%
中的%来从良性\u 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]
value\u ttl\u ben您只需使用%
中的%即可从良性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]
value\u ttl\u ben您想要什么还不完全清楚,像这样的事情似乎很容易<代码>良性\u TTL[良性\u TTL$Name%在%New\u DNS中,]
不完全清楚您想要什么,像这样的事情似乎很容易<代码>良性\u TTL[良性\u TTL$Name%在%New\u DNS中,]
是。完全一样。然后我可以提取我想要的值。太好了。很高兴能帮上忙!如果这给了你答案,请考虑把它标记为这样!计算方面呢?这样做需要更少的“努力”,对吗?是的。完全一样。然后我可以提取我想要的值。太好了。很高兴能帮上忙!如果这给了你答案,请考虑把它标记为这样!计算方面呢?这种方法需要更少的“努力”,对吗?这确实是一个简洁明了的解决方案。根据OP想要/需要什么(直截了当的与有组织的(例如,我更喜欢我的解决方案,因为它能更清晰地组织数据)),他可以选择其中之一。是@David。这就是我想要的!清晰和组织。干杯这确实是一个简洁明了的解决方案。根据OP想要/需要什么(直截了当的与有组织的(例如,我更喜欢我的解决方案,因为它能更清晰地组织数据)),他可以选择其中之一。是@David。这就是我想要的!清晰和组织。干杯