作为一个工作示例:数据帧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"]