数据帧的给定元素中哪一个在R中较大



我需要指定给定元素中哪一个更大,如果它在第一行中,则返回"T";并且如果第二返回"0";F";例如

A  B  C  D  E 
1   5  1  3  6  3
2   4  0  1  8  6

我需要输出在像一样的列表中

A "T"
B "T"
C "T"
D "F"
E "F"

我试过类似的东西

if_else(data[1,]>data[2,],'T','F')

但似乎不起作用

d <- read.table(header = T, text = "A  B  C  D  E 
1   5  1  3  6  3
2   4  0  1  8  6")
d
#>   A B C D E
#> 1 5 1 3 6 3
#> 2 4 0 1 8 6
sapply(d, (x) c(T, F)[which.max(x)])
#>     A     B     C     D     E 
#>  TRUE  TRUE  TRUE FALSE FALSE

R4.1+apply获得参数simplify = T后,上述sapply代码可以重写为

apply(d, 2,  (x) c(T, F)[which.max(x)], simplify = T)

do.call(rbind, lapply(d, (x) c('T', 'F')[which.max(x)]))
[,1]
A "T" 
B "T" 
C "T" 
D "F" 
E "F"

如果使用4.1之前的R版本,则将上述代码中的(x)替换为function(x)

我们可以将summariseacross一起使用

library(dplyr)
d %>% 
summarise(across(everything(), ~ first(.) == max(.)))
#     A    B    C     D     E
#1 TRUE TRUE TRUE FALSE FALSE

数据

d <- structure(list(A = 5:4, B = 1:0, C = c(3L, 1L), D = c(6L, 8L), 
E = c(3L, 6L)), class = "data.frame", row.names = c("1", 
"2"))

最新更新