R编程 - 计算索引无序的两个列表中的公共元素的数量

时间:2016-10-17 22:13:04

标签: arrays r

我有两个名单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进行比较,以便我可以计算模型的准确性。

3 个答案:

答案 0 :(得分:2)

这是一个可能的解决方案。

> length(intersect(paste0(df1$Index, df1$Value), paste0(df2$Index, df2$Value)))
[1] 3

其中df1df2是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