【发布时间】:2015-08-09 23:32:43
【问题描述】:
假设我有以下向量:
V<-c(-1,-1,1,1,1,-1,-1,1)
我想知道以下类别中不同对的数量:
(1,1)、(-1,1)、(1,-1) 和 (-1,-1)
在我的示例中,每个都有一对。
我一直在尝试用函数split 和setkey 解决这个问题,但是我无法进行分类。
【问题讨论】:
标签: r count duplicates categories
假设我有以下向量:
V<-c(-1,-1,1,1,1,-1,-1,1)
我想知道以下类别中不同对的数量:
(1,1)、(-1,1)、(1,-1) 和 (-1,-1)
在我的示例中,每个都有一对。
我一直在尝试用函数split 和setkey 解决这个问题,但是我无法进行分类。
【问题讨论】:
标签: r count duplicates categories
ng <- length(V)/2
table(sapply(split(V,rep(1:ng,each=2)),paste0,collapse="&"))
# -1&-1 -1&1 1&-1 1&1
# 1 1 1 1
这是一个更好的替代方案,它也使用split,遵循@MartinMorgan 的回答模式:
table(split(V,1:2))
# 2
# 1 -1 1
# -1 1 1
# 1 1 1
【讨论】:
rep 中写each=2。现在它应该可以工作了。
创建一个索引,该索引将重新循环以选择第一个(或取反时第二个)元素
> idx = c(TRUE, FALSE)
然后交叉制表观察的出现
> xtabs(~V[idx] + V[!idx])
V[!idx]
V[idx] -1 1
-1 1 1
1 1 1
【讨论】:
first <- V[c(TRUE,FALSE)]; second <- V[c(FALSE,TRUE)]; table(first,second) 或类似的方法。
或者
table(apply(matrix(v, ncol = 2, byrow = TRUE), 1, paste, collapse = ",") )
【讨论】:
table(do.call(paste, as.data.frame(matrix(V, ncol = 2))))
byrow = TRUE