我将while (vm.SaveCommand.Executing) ;
值存储在数据框中。我想返回最常出现的(x, y)
组合。
以下是一个例子:
(x, y)
最常见的> x = c(1, 1, 2, 3, 4, 5, 6)
> y = c(1, 1, 5, 6, 9, 10, 12)
> xy = data.frame(x, y)
> xy
x y
1 1 1
2 1 1
3 2 5
4 3 6
5 4 9
6 5 10
7 6 12
值为(x, y)
。
我为单个列尝试了答案here。它适用于单个列,但不适用于两列的聚合。
(1, 1)
如何在R中的数据框中的两列中检索最重复的(x,y)值?
编辑:> tail(names(sort(table(xy$x))), 1)
[1] "1"
> tail(names(sort(table(xy$x, xy$y))), 1)
NULL
应被视为与c(1, 2)
不同。
答案 0 :(得分:11)
不确定所需的输出应该如何,但这是一个可能的解决方案
res <- table(do.call(paste, xy))
res[which.max(res)]
# 1 1
# 2
为了获得实际值,可以做
res <- do.call(paste, xy)
xy[which.max(ave(seq(res), res, FUN = length)), ]
# x y
# 1 1 1
答案 1 :(得分:9)
(尽管所有的加票,@ DavidArenburg和我的方法的混合
res = do.call("paste", c(xy, sep="\r"))
which.max(tabulate(match(res, res)))
可能简单有效。)
可能看起来有点圆,但第一步是将xy
列中可能的任意值转换为1到列中唯一值的整数
x = match(xy[[1]], unique(xy[[1]]))
y = match(xy[[2]], unique(xy[[2]]))
然后将列组合编码为唯一值
v = x + (max(x) - 1L) * y
索引最小化了所考虑的值的范围,并且编码将二维问题简化为单个维度。这些步骤将任何制表所需的空间(与其他答案中的table()
一样)减少到最小,而不创建字符向量。
如果一个人希望在一个维度中最常见,那么就可以索引并制表v
tbl = tabulate(match(v, v))
并找到第一次出现的最大值的索引,例如,
df[which.max(tbl),]
这是一个做魔术的功能
whichpairmax <- function(x, y) {
x = match(x, unique(x)); y = match(y, unique(y))
v = x + (max(x) - 1L) * y
which.max(tabulate(match(v, v)))
}
和几个测试
> set.seed(123)
> xy[whichpairmax(xy[[1]], xy[[2]]),]
x y
1 1 1
> xy1 = xy[sample(nrow(xy)),]
> xy1[whichpairmax(xy1[[1]], xy1[[2]]),]
x y
1 1 1
> xy1
x y
3 2 5
5 4 9
7 6 12
4 3 6
6 5 10
1 1 1
2 1 1
对于任意data.frame
whichdfmax <- function(df) {
v = integer(nrow(df))
for (col in df) {
col = match(col, unique(col))
v = col + (max(col) - 1L) * match(v, unique(v))
}
which.max(tabulate(match(v, v)))
}
答案 2 :(得分:7)
尝试
library(data.table)
setDT(xy)[, .N,list(x,y)][which.max(N)]
# x y N
#1: 1 1 2
答案 3 :(得分:4)
t<-table(xy)
which(t == max(t), arr.ind = TRUE)
<强>更新强>
正如David Arenburg所指出的,初始代码只返回table(xy)
函数中值的索引。如果您需要最大值的值和可能出现的次数,您可以尝试:
t<-table(xy)
indexes <- which(t == max(t), arr.ind = TRUE)[1,]
x_value <- dimnames(t)$x[indexes["x"]]
y_value <- dimnames(t)$y[indexes["y"]]
rep_number <- max(t)
现在我怀疑有更好的方法来编写最后三行代码,但我还是R世界的新手
答案 4 :(得分:3)
code for sm_35
Function : _Z14triUnrollTest1Pf
.headerflags @"EF_CUDA_SM35 EF_CUDA_PTX_SM(EF_CUDA_SM35)"
/* 0x08b8b8a0b010a000 */
/*0008*/ MOV R1, c[0x0][0x44]; /* 0x64c03c00089c0006 */
/*0010*/ MOV R0, c[0x0][0x140]; /* 0x64c03c00281c0002 */
/*0018*/ IADD R2.CC, R0, 0x10; /* 0xc0840000081c0009 */
/*0020*/ MOV32I R0, 0x3f800000; /* 0x741fc000001fc002 */
/*0028*/ IADD.X R3, RZ, c[0x0][0x144]; /* 0x60804000289ffc0e */
/*0030*/ ST.E [R2], R0; /* 0xe4800000001c0800 */
/*0038*/ ST.E [R2+0x10], R0; /* 0xe4800000081c0800 */
/* 0x080000b810b8b8b8 */
/*0048*/ ST.E [R2+0x14], R0; /* 0xe48000000a1c0800 */
/*0050*/ ST.E [R2+0x20], R0; /* 0xe4800000101c0800 */
/*0058*/ ST.E [R2+0x24], R0; /* 0xe4800000121c0800 */
/*0060*/ ST.E [R2+0x28], R0; /* 0xe4800000141c0800 */
/*0068*/ EXIT; /* 0x18000000001c003c */
/*0070*/ BRA 0x70; /* 0x12007ffffc1c003c */
/*0078*/ NOP; /* 0x85800000001c3c02 */
.....................................
Function : _Z14triUnrollTest2Pf
.headerflags @"EF_CUDA_SM35 EF_CUDA_PTX_SM(EF_CUDA_SM35)"
/* 0x08b8b8a0b010a000 */
/*0008*/ MOV R1, c[0x0][0x44]; /* 0x64c03c00089c0006 */
/*0010*/ MOV R0, c[0x0][0x140]; /* 0x64c03c00281c0002 */
/*0018*/ IADD R2.CC, R0, 0x10; /* 0xc0840000081c0009 */
/*0020*/ MOV32I R0, 0x3f800000; /* 0x741fc000001fc002 */
/*0028*/ IADD.X R3, RZ, c[0x0][0x144]; /* 0x60804000289ffc0e */
/*0030*/ ST.E [R2], R0; /* 0xe4800000001c0800 */
/*0038*/ ST.E [R2+0x10], R0; /* 0xe4800000081c0800 */
/* 0x080000b810b8b8b8 */
/*0048*/ ST.E [R2+0x14], R0; /* 0xe48000000a1c0800 */
/*0050*/ ST.E [R2+0x20], R0; /* 0xe4800000101c0800 */
/*0058*/ ST.E [R2+0x24], R0; /* 0xe4800000121c0800 */
/*0060*/ ST.E [R2+0x28], R0; /* 0xe4800000141c0800 */
/*0068*/ EXIT; /* 0x18000000001c003c */
/*0070*/ BRA 0x70; /* 0x12007ffffc1c003c */
/*0078*/ NOP; /* 0x85800000001c3c02 */
.....................................
答案 5 :(得分:2)
这个怎么样?
x = c(1, 1, 2, 3, 4, 5, 6)
y = c(1, 1, 5, 6, 9, 10, 12)
xy = data.frame(x, y)
table(xy)
y
x 1 5 6 9 10 12
1 2 0 0 0 0 0
2 0 1 0 0 0 0
3 0 0 1 0 0 0
4 0 0 0 1 0 0
5 0 0 0 0 1 0
6 0 0 0 0 0 1
答案 6 :(得分:1)
library(dplyr)
xy %>%
group_by(x, y) %>%
tally() %>%
ungroup %>%
top_n(1)
答案 7 :(得分:1)
使用dplyr
library(dplyr)
xy %>% group_by(x, y) %>% summarise(n=n()) %>%
ungroup %>% filter(n==max(n)) %>% select(-n)
答案 8 :(得分:1)
晚会,但这是时间测试:
colx
-----
2
答案 9 :(得分:1)
使用sqldf
:
library(sqldf)
sqldf('SELECT x, y
FROM xy
GROUP BY (x||y)
ORDER BY COUNT(*) DESC
LIMIT 1')
x y
1 1 1
如果我们想显示一个频率列,而不只是一行(如果有任何关系):
x = c(1, 1, 2, 3, 4, 12, 12)
y = c(1, 1, 5, 6, 9, 12, 12)
xy = data.frame(x, y)
sqldf('SELECT x, y, COUNT(*) AS freq
FROM xy
GROUP BY (x||y)
ORDER BY COUNT(*) DESC')
x y freq
1 1 1 2
2 12 12 2
3 2 5 1
4 3 6 1
5 4 9 1