gpt4 book ai didi

r - 如何有条件地将数据框行 append 到上面的行

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

我有一个看起来像这样的数据框

   ID       Date  Period Account                      Amount1 Amount2             
<chr> <chr> <chr> <chr> <chr> <chr>
1 76311099 43494 /1 P / ABC / 123456 NA 3116362
2 NA NA NA C100ST NA NA
3 66112599 37135 /26 S / ADR NA 1246880.3900000001
4 NA NA NA 65101599 / S0 NA NA
5 45461599 37155 /O6 B / INR / REVERSE NA 623440.19000000006
6 NA NA NA UNDO / S0 NA NA
7 69876599 37134 /O3 N / ABC 401.63 NA
8 19991099 37122 /O5 P / PDA / ASK 4265 401.65 NA
9 NA NA NA AT045BT NA NA

我一直在努力完成这件事,但我尝试过的都没有奏效。基本上我想要做的是,如果一行的 ID 值为 NA,我想将 Account 列中的文本 append 到上面的行,然后将其删除。

我希望最终结果看起来像这样:

   ID      Date  Period Account                      Amount1 Amount2             
<chr> <chr> <chr> <chr> <chr> <chr>
1 76311099 43494 /1 P / ABC / 123456 / C100ST NA 3116362
2 66112599 37135 /26 S / ADR / 65101599 / S0 NA 1246880.3900000001
3 45461599 37155 /O6 B / INR / REVERSE / UNDO / S0 NA 623440.19000000006
4 69876599 37134 /O3 N / ABC 401.63 NA
5 19991099 37122 /O5 P / PDA / ASK 4265 / AT045BT 401.65 NA

如您所见,ID 值为 69876599 的行保持不变,因为它的正下方没有其他行带有 NA ID 的值。

有谁知道解决这个问题的方法吗?

最佳答案

一个选项是 fill 选定的列以将 NA 更改为先前的非 NA 元素,按这些列分组,通过连接折叠“帐户”将元素转换为单个字符串,然后汇总剩余的“Amount”列以获得第一个非 NA 元素

library(tidyverse)
df1 %>%
fill(ID, Date, Period) %>%
group_by(ID, Date, Period) %>%
group_by(Account = str_c(Account, collapse = ' / '), add = TRUE) %>%
summarise_all(list(~ .[which(!is.na(.))[1]]))
# A tibble: 5 x 6
# Groups: ID, Date, Period [5]
# ID Date Period Account Amount1 Amount2
# <int> <int> <chr> <chr> <dbl> <dbl>
#1 19991099 37122 /O5 P / PDA / ASK 4265 / AT045BT 402. NA
#2 45461599 37155 /O6 B / INR / REVERSE / UNDO / S0 NA 623440.
#3 66112599 37135 /26 S / ADR / 65101599 / S0 NA 1246880.
#4 69876599 37134 /O3 N / ABC 402. NA
#5 76311099 43494 /1 P / ABC / 123456 / C100ST NA 3116362

数据

df1 <- structure(list(ID = c(76311099L, NA, 66112599L, NA, 45461599L, 
NA, 69876599L, 19991099L, NA), Date = c(43494L, NA, 37135L, NA,
37155L, NA, 37134L, 37122L, NA), Period = c("/1", NA, "/26",
NA, "/O6", NA, "/O3", "/O5", NA), Account = c("P / ABC / 123456",
"C100ST", "S / ADR", "65101599 / S0", "B / INR / REVERSE", "UNDO / S0",
"N / ABC", "P / PDA / ASK 4265", "AT045BT"), Amount1 = c(NA,
NA, NA, NA, NA, NA, 401.63, 401.65, NA), Amount2 = c(3116362,
NA, 1246880.39, NA, 623440.19, NA, NA, NA, NA)),
class = "data.frame", row.names = c("1",
"2", "3", "4", "5", "6", "7", "8", "9"))

关于r - 如何有条件地将数据框行 append 到上面的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56346357/

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