gpt4 book ai didi

r - 给定列名,提取最后一个非 NA 值

转载 作者:行者123 更新时间:2023-12-02 01:23:50 27 4
gpt4 key购买 nike

对于以下数据集df,我希望给出列名称并返回该列的最后一个非NA值:

         date cumul_val1 cumul_val2 month_val1 month_val2
1 2020-05-31 48702.97 45919.59 NA NA
2 2020-06-30 69403.68 62780.21 20700.71 16860.62
3 2020-07-31 83631.36 75324.61 14227.68 12544.40
4 2020-08-31 98485.95 88454.14 14854.59 13129.53
5 2020-09-30 117072.67 103484.20 18586.72 15030.06
6 2020-10-31 133293.80 116555.76 16221.13 13071.56
7 2020-11-30 150834.45 129492.36 17540.65 12936.60
8 2020-12-31 176086.22 141442.95 25251.77 11950.59
9 2021-02-28 NA 13985.87 NA 13985.87
10 2021-03-31 NA NA NA 13589.95
11 2021-04-30 NA NA NA 12663.94
12 2021-05-31 NA NA NA 14078.32

这意味着我们可以实现类似的东西,但不传递特定的日期值:

> df[df$date == '2020-12-31', "cumul_val1"]
[1] 176086.2
> df[df$date == '2021-02-28', "cumul_val2"]
[1] 13985.87
> df[df$date == '2020-12-31', "month_val1"]
[1] 25251.77
> df[df$date == '2021-05-31', "month_val2"]
[1] 14078.32

请问如何实现?谢谢。

数据:

df <- structure(list(date = c("2020-05-31", "2020-06-30", "2020-07-31", 
"2020-08-31", "2020-09-30", "2020-10-31", "2020-11-30", "2020-12-31",
"2021-02-28", "2021-03-31", "2021-04-30", "2021-05-31"), cumul_val1 = c(48702.97,
69403.68, 83631.36, 98485.95, 117072.67, 133293.8, 150834.45,
176086.22, NA, NA, NA, NA), cumul_val2 = c(45919.59, 62780.21,
75324.61, 88454.14, 103484.2, 116555.76, 129492.36, 141442.95,
13985.87, NA, NA, NA), month_val1 = c(NA, 20700.71, 14227.68,
14854.59, 18586.72, 16221.13, 17540.65, 25251.77, NA, NA, NA,
NA), month_val2 = c(NA, 16860.62, 12544.4, 13129.53, 15030.06,
13071.56, 12936.6, 11950.59, 13985.87, 13589.95, 12663.94, 14078.32
)), class = "data.frame", row.names = c(NA, -12L))

最佳答案

library(tidyverse)

get_last <- function(df, column_name) {
df %>%
pull(!!sym(column_name)) %>%
na.omit() %>%
last()
}

get_last(df, "cumul_val1")

[1] 176086.2

或者

df %>%  
pivot_longer(-date) %>%
group_by(name) %>%
drop_na() %>%
slice_tail(n = 1)

# A tibble: 4 x 3
# Groups: name [4]
date name value
<chr> <chr> <dbl>
1 2020-12-31 cumul_val1 176086.
2 2021-02-28 cumul_val2 13986.
3 2020-12-31 month_val1 25252.
4 2021-05-31 month_val2 14078.

关于r - 给定列名,提取最后一个非 NA 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75385197/

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