gpt4 book ai didi

根据另一列的最后一个值从一列返回值

转载 作者:行者123 更新时间:2023-12-04 09:43:59 25 4
gpt4 key购买 nike

我有一个这样的数据集:

data <- data.frame(Time = c(1,4,6,9,11,13,16, 25, 32, 65),
A = c(10, NA, 13, 2, 32, 19, 32, 34, 93, 12),
B = c(1, 99, 32, 31, 12, 13, NA, 13, NA, NA),
C = c(2, 32, NA, NA, NA, NA, NA, NA, NA, NA))

我要检索的是 Time 中的值对应于 A 中的最后一个数值, B , 和 C .
例如, A 的最后一个数值, B , 和 C分别为 12、13 和 32。

所以, Time对应的值为 65、25 和 4。

我试过类似 data[which(data$Time== max(data$A)), ] ,但这不起作用。

最佳答案

我们可以乘以 row索引与逻辑 matrix ,并获得 colMaxs (来自 matrixStats )对“时间”列进行子集

library(matrixStats)
data$Time[colMaxs((!is.na(data[-1])) * row(data[-1]))]
#[1] 65 25 4

或使用 base R ,我们得到索引 which/arr.ind ,获取 max使用 group by 操作( tapply )索引并使用它来提取“时间”值
m1 <- which(!is.na(data[-1]), arr.ind = TRUE)
data$Time[tapply(m1[,1], m1[,2], FUN = max)]
#[1] 65 25 4

或与 summarise/acrossdplyr 的开发版中
library(dplyr)
data %>%
summarise(across(A:C, ~ tail(Time[!is.na(.)], 1)))
# A B C
#1 65 25 4

或使用 summarise_at使用当前版本的 dplyr
data %>%
summarise_at(vars(A:C), ~ tail(Time[!is.na(.)], 1))

关于根据另一列的最后一个值从一列返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62203457/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com