R中的条件索引



作为一个工作示例:数据帧df由两个数字列组成:x,y我希望根据x列中的最大值对y列中的值进行索引

x<-rnorm(100,1, 2)
y<-rnorm(100,0.5, 2)
df<-data.frame(x,y)
max(x)
#[1] 5.842416

如何基于数据帧中(x(的行位置而不是基于(x(值来识别(y(的值?

代码是在for循环中实现的,这是我使用dplyr的解决方案,但它返回了一列没有错误的NA

x[i] <- max(df$x)
y[i]<-df %>% group_by(y) %>% slice(which.max(x[i]))  

如果我正确理解这个问题,你所要做的就是用x过滤数据帧,然后提取y中的值,如下所示:

set.seed(2021)
x <- rnorm(100,1, 2)
y <- rnorm(100,0.5, 2)
df <- data.frame(x,y)
df[df$x == max(df$x), "y"]
#> -1.398957

如果你坚持使用tidyverse:

df %>% 
filter(x == max(x)) %>% 
pull(y)
#> -1.398957

如果你不需要数据帧,你可以尝试:

y[x == max(x)]
#> -1.398957

关键是逻辑子集——R擅长的东西!

尝试

df[which(df$x == max(df$x)), "y"]

最新更新