我有一个包含以下数据的数据框:
date=strptime(c(20110101,20110102,20110103,20110104,20110105,20110106),'%Y%m%d')
rate1=c(1,2,3,4,5,6)
rate2=c(2,1,3,6,8,4)
rate3=c(4,1,3,6,8,3)
rate4=c(7,8,9,2,1,8)
z=data.frame(date,rate1,rate2,rate3,rate4)
z$max=pmax(rate1,rate2,rate3,rate4)
Run Code Online (Sandbox Code Playgroud)
pmax函数允许我获取该记录的最大值,但我想知道如何获得该记录的最大值索引.
如果z $ max相等7,8,9,6,8,8,我想得到5,5,5,3,3,5
这可能吗?我知道这似乎很简单,但我无法在任何地方找到答案.
我有一个4列数组,我想获得一个向量,包含每行包含该行的最大值的列的标签.
我可以在循环中执行此操作,但我想使用矩阵函数来提高速度.
如何在不编写自己的lib函数的情况下完成此操作?
我有一个看起来像这样的表:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
586 0 0 0 1 0 0 0 1 3 1 0 1 0 0 0 0 0 1 0 2 0 3 0 0 0 4 0 1 2 0
637 0 0 0 0 0 0 2 3 2 2 0 4 0 0 0 0 1 …Run Code Online (Sandbox Code Playgroud) 我正在尝试获取所选列中具有最高值的列的索引。当尝试使用 时dplyr,我的尝试没有给我正确的结果。
library(dplyr);library(magrittr)
DF1 <- data.frame(Factor1 = c(1,2,4),Factor2 = c(3,1,1),Factor3 = c(9,1,0)) %>%
mutate(max_ind = which.max(c(.$Factor1,.$Factor2,.$Factor3))) %>% print
Factor1 Factor2 Factor3 max_ind
1 1 3 9 7
2 2 1 1 7
3 4 1 0 7
Run Code Online (Sandbox Code Playgroud)
错误在哪里?为什么dplyr会有这样的行为。我可能应该使用rowwise,但这似乎不是最好的方法。有想过如何做到这一点base吗?tidyversedata.table
通过 sapply 我得到了这个:
DF1 <- data.frame(Factor1 = c(1,2,4),Factor2 = c(3,1,1),Factor3 = c(9,1,0)) %>%
+ mutate(max_ind = which.max(c(Factor1,Factor2,Factor3)),
+ max_ind2 = sapply(X = ., function(x) which.max(c(x[Factor1],x[Factor2],x[Factor3])))) %>% print
Factor1 Factor2 …Run Code Online (Sandbox Code Playgroud)