R 获取每行在数据框中出现次数最多的值

R 获取每行在数据框中出现次数最多的值,r,dataframe,sapply,R,Dataframe,Sapply,假设我有一个简单的数据框 test_df <- data.frame(c(0,0,1,0,0,1,1,1,1,1),c(1,0,0,0,0,0,0,0,0,0)) 到目前为止还不错。然后 > sapply((sapply(test_df,table)),max) [1] 4 6 9 1 我迷路了,我失去了联系吗?1 -> 6 , 0 -> 9 我想要的是返回一个带有“winner”的向量:1,0 我们可以使用apply和MARGIN=1从sapply输出的每一行中提取max值 f

假设我有一个简单的数据框

test_df <- data.frame(c(0,0,1,0,0,1,1,1,1,1),c(1,0,0,0,0,0,0,0,0,0))
到目前为止还不错。然后

> sapply((sapply(test_df,table)),max)
[1] 4 6 9 1
我迷路了,我失去了联系吗?1 -> 6 , 0 -> 9 我想要的是返回一个带有“winner”的向量:1,0


我们可以使用
apply
MARGIN=1
sapply
输出的每一行中提取
max

frqCol <- sapply(test_df, table)
apply(frqCol, 1, max)
# 0 1 
# 9 6 
如果我们需要每列的“max”值

apply(frqCol, 2, max)

用新的例子

test_df <- data.frame(v1= c(0,0,1,0,0,1,1,1,1,1),
                  v2= c(1,0,0,0,0,0,0,0,0,0),
                  v3= c(1,0,0,0,0,0,0,0,0,1)) 
frqCol <- sapply(test_df, table)
apply(frqCol, 2, max)
#v1 v2 v3 
#6  9  8 
colMaxs(frqCol)
#[1] 6 9 8

test\u df这可以在一个
apply
语句中完成。尽管不清楚您是否希望每一行或每一列的最大出现次数,所以这里有两个(使用@akrun的cleaner数据集),返回一个向量,显示每一行/每一列的“赢家”(1或0)

## Data
test_df <- data.frame(v1= c(0,0,1,0,0,1,1,1,1,1),
                      v2= c(1,0,0,0,0,0,0,0,0,0),
                      v3= c(1,0,0,0,0,0,0,0,0,1)) 
#    v1 v2 v3
# 1   0  1  1
# 2   0  0  0
# 3   1  0  0
# 4   0  0  0
# 5   0  0  0
# 6   1  0  0
# 7   1  0  0
# 8   1  0  0
# 9   1  0  0
# 10  1  0  1

## Solution - For each row
apply(test_df, 1, function(x) { sum(sum(x == 1) > sum(x == 0)) })

## Result
# [1] 1 0 0 0 0 0 0 0 0 1

## Solution - For each column
apply(test_df, 2, function(x) { sum(sum(x == 1) > sum(x == 0)) })

## Result 
# v1 v2 v3 
# 1  0  0 
##数据
测试_dfsum(x==0))}
##结果
# [1] 1 0 0 0 0 0 0 0 0 1
##解决方案-针对每列
应用(test_df,2,函数(x){sum(sum(x==1)>sum(x==0))})
##结果
#v1 v2 v3
# 1  0  0 

sapply+apply看起来非常接近,但是如果向数据帧添加另一个向量,如何使用apply<代码>test_df@user869097你能在你的帖子里更新一下吗。很难从评论中复制/粘贴。另外,请务必更新预期的output@user869097更新了帖子,效率很低:
do.call(pmax,data.frame(t(frqCol)))
;)@G.Cocca是的,可以使用,但我们需要将其转换为data.frame。当您创建一个不带任何列名的
data.frame
时,您将得到
c.0..0..1..0..0..1..1..1..1
作为列名。请检查您创建的“test_df”的输出。
apply(frqCol, 2, max)
colMaxs(frqCol)
test_df <- data.frame(v1= c(0,0,1,0,0,1,1,1,1,1),
                  v2= c(1,0,0,0,0,0,0,0,0,0),
                  v3= c(1,0,0,0,0,0,0,0,0,1)) 
frqCol <- sapply(test_df, table)
apply(frqCol, 2, max)
#v1 v2 v3 
#6  9  8 
colMaxs(frqCol)
#[1] 6 9 8
## Data
test_df <- data.frame(v1= c(0,0,1,0,0,1,1,1,1,1),
                      v2= c(1,0,0,0,0,0,0,0,0,0),
                      v3= c(1,0,0,0,0,0,0,0,0,1)) 
#    v1 v2 v3
# 1   0  1  1
# 2   0  0  0
# 3   1  0  0
# 4   0  0  0
# 5   0  0  0
# 6   1  0  0
# 7   1  0  0
# 8   1  0  0
# 9   1  0  0
# 10  1  0  1

## Solution - For each row
apply(test_df, 1, function(x) { sum(sum(x == 1) > sum(x == 0)) })

## Result
# [1] 1 0 0 0 0 0 0 0 0 1

## Solution - For each column
apply(test_df, 2, function(x) { sum(sum(x == 1) > sum(x == 0)) })

## Result 
# v1 v2 v3 
# 1  0  0