我需要指定给定元素中哪一个更大,如果它在第一行中,则返回"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)
我们可以将summarise
与across
一起使用
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"))