gpt4 book ai didi

R:重复值直到按组出现新值,仅出现一次第一个非 NA 值

转载 作者:行者123 更新时间:2023-12-03 08:41:52 25 4
gpt4 key购买 nike

我希望重复值,直到按组出现新值。我有一个我在网上找到的功能,它几乎可以满足我的要求,但并不完全。这是该功能:

    repeat.before <- function(x) {
ind <- which(!is.na(x))
ind_rep <- ind
if (is.na(x[1])) {
ind_rep <- c(min(ind), ind)
ind <- c(1, ind)
}
rep(x[ind_rep], times = diff(c(ind, length(x) + 1)))
}

此功能将成功重复该值,直到出现新值,按组。问题是,如果列以 NA 开头,则在第一个值之前存在的以下行将最终采用第一个值,而不是剩余的 NA。我将用这个例子来说明我的意思:
    group    location 
A NA
A NA
A New York
A NA
A NA
B Chicago
B NA
B Philly
B NA

上面的代码将输出:
    group    location 
A New York
A New York
A New York
A New York
A New York
B Chicago
B Chicago
B Philly
B Philly

这再次与我正在寻找的非常接近,但并不完全。这是我正在寻求的输出:
    group    location 
A NA
A NA
A New York
A New York
A New York
B Chicago
B Chicago
B Philly
B Philly

基本上,我不希望“重复”代码在找到第一个值之前开始工作。在这样做之前,我希望行保持 NA。目的是使行不会被错误分类,即在上面的示例中,前两个 A 行不应标记为 New York。

最佳答案

按“组”分组后的一种选择是 fill。将 fill.direction 指定为“up”或“down”(默认选项)一起使用。在这里,我们只需要基于预期输出的 'down' 选项

library(dplyr)
library(tidyr)
df1 %>%
group_by(group) %>%
fill(location)
# A tibble: 9 x 2
# Groups: group [2]
# group location
# <chr> <chr>
#1 A <NA>
#2 A <NA>
#3 A New York
#4 A New York
#5 A New York
#6 B Chicago
#7 B Chicago
#8 B Philly
#9 B Philly

数据
df1 <- structure(list(group = c("A", "A", "A", "A", "A", "B", "B", "B", 
"B"), location = c(NA, NA, "New York", NA, NA, "Chicago", NA,
"Philly", NA)), class = "data.frame", row.names = c(NA, -9L))

关于R:重复值直到按组出现新值,仅出现一次第一个非 NA 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55938875/

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