【问题标题】:The number of two specific elements between two columns in RR中两列之间的两个特定元素的数量
【发布时间】:2017-11-10 17:34:07
【问题描述】:

我有以下矩阵:

x=c(0,0,0,1,1,1,2,2,2,0,1,2,0,1,2,0,1,2)
M=matrix(x,9,2)

矩阵M为:

> M
 0    0
 0    1
 0    2
 1    0
 1    1
 1    2
 2    0
 2    1
 2    2

如何发现整行中(0,0)(0,1)(0,2)...(即第一行、第二行、第三行等)的个数等于1 ?

【问题讨论】:

  • 你的意思是行元素的总和吗?例如第 1 行 (0, 0) 为 0,第 2 行 (0, 1) 为 1,等等?如果是这样,请尝试sum(rowSums(M) == 1)
  • @duckmayr。我的意思是矩阵M的整9行向量(0,0)的个数等于1。也就是说矩阵M的整9行向量(0,0)有多少个?答案是 1。
  • 我想我明白了……你的意思是该行的每个元素都等于 1;即,对于每行 (1, 1) 的两列。在这种情况下,请尝试sum(apply(M, 1, function(x) all(x == 1)))
  • 不确定是否需要table,即table(paste(M[,1], M[,2], sep="_"))
  • @duckmayr 不,不是这个。有多少行等于 (0,0), (0,1), (0,2)...?这是另一种解释方式。

标签: r matrix vector


【解决方案1】:

如果我们需要获取频率,使用table

tbl <- table(paste(M[,1], M[,2], sep="_"))

这可以通过将 'tbl' 的 names 分成两列和 cbinding 'tbl' 的值来转换为 3 列 data.frame

cbind(read.table(text=names(tbl), sep="_", header = FALSE), value = as.vector(tbl))

【讨论】:

  • 就是这样!太好了!
【解决方案2】:

如果你想检查每一行是否出现一次,你可以使用

duplicated(data.frame(M))

如果任何结果值为TRUE,那么您就知道有些行出现了不止一次(并且您知道它们在哪里)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-07
    • 1970-01-01
    • 2014-08-26
    • 1970-01-01
    • 2012-01-01
    • 1970-01-01
    相关资源
    最近更新 更多