我有两个名单A和B
A如下:
Index | Value
16 | 17
22 | 17
1 | 6
32 | 17
列表B如下:
Index | Value
16 | 17
22 | 17
1 | 17
32 | 17
在列表中,A [i] == B [i]为3的次数。如何显示该值?如果数组是有序的(索引= 0,1,2,3),我会执行以下操作:
count = 0
for(i in 0:3){
if(A[i] == B[i]){
count = count + 1
}
}
但由于列表索引不合规,我不知道如何继续。
编辑(有关我要做的事情的详细信息):
这里A和B是引用n_pred和n_test的数据帧(参见下面的代码)。
我在我的代码中使用了Iris数据集。在这里,我正在尝试构建一个神经网络来测试数据集的预测精度。我已将数据分成测试和训练数据(比例为20:80)。代码如下:
n_data <- cbind(data, as.data.frame.matrix(table(rownames(data), data$Species)))
n_trainIndex <- sample(1:nrow(n_data), 0.8 * nrow(n_data))
n_train <- n_data[n_trainIndex,]
n_test <- n_data[-n_trainIndex,]
这就是我获取数组随机索引的方法。
接下来我按如下方式构建了神经网络:
nn = neuralnet(setosa + versicolor + virginica ~ Sepal.Length + Sepal.Width + Petal.Length + Petal.Width, data =n_train, hidden = c(2))
plot(nn)
n_pred = compute(nn, n_test[1:4])$net.result
getValue = function(list){
if(list[1] == list[4]){
return ('setosa')
}
else if(list[2] == list[4]){
return ('versicolor')
}
else{
return ('virginica')
}
}
n_pred = as.data.frame(n_pred)
n_pred[,'result'] = apply(n_pred[1:3], 1, max)
n_pred[,'Species'] = apply(n_pred, 1, getValue)
我想将n_pred $ Species与n_test $ Species进行比较,以便我可以计算模型的准确性。
答案 0 :(得分:2)
这是一个可能的解决方案。
> length(intersect(paste0(df1$Index, df1$Value), paste0(df2$Index, df2$Value)))
[1] 3
其中df1
和df2
是data.frames不列出,它们看起来像:
> df1
Index Value
1 16 17
2 22 17
3 1 6
4 32 17
> df2
Index Value
1 16 17
2 22 17
3 1 17
4 32 17
答案 1 :(得分:0)
merge
找到两个data.frames的内部联接,并计算行数:
nrow(merge(A, B))
## [1] 3
A <- structure(list(Index = c(16L, 22L, 1L, 32L), Value = c(17L, 17L,
6L, 17L)), .Names = c("Index", "Value"), class = "data.frame", row.names = c("1",
"2", "3", "4"))
B <- structure(list(Index = c(16L, 22L, 1L, 32L), Value = c(17L, 17L,
17L, 17L)), .Names = c("Index", "Value"), class = "data.frame", row.names = c("1",
"2", "3", "4"))
答案 2 :(得分:0)
试试这个:
sum(rowSums(A==B)==ncol(A))
#[1] 3