gpt4 book ai didi

根据 R 中的行号重组数据

转载 作者:行者123 更新时间:2023-12-04 02:33:45 26 4
gpt4 key购买 nike

我在按需要重组数据时遇到问题。我的 df 看起来像这样:

id <- (1:20)
author <- c("A","A","A","A","A","B","B","B","A","A","A","B","B","B","B"
,"B","B","B","A","A")
df <- data.frame(id, author)

> print(df)

id author
1 1 A
2 2 A
3 3 A
4 4 A
5 5 A
6 6 B
7 7 B
8 8 B
9 9 A
10 10 A
11 11 A
12 12 B
13 13 B
14 14 B
15 15 B
16 16 B
17 17 B
18 18 B
19 19 A
20 20 A

我正在尝试获取一个数据结构,其中列是作者,rwos 指示每个 A 或 B 值序列的第一个和最后一个 id 值。所以在这种情况下,作者 A 的第一行是 id = 1,该系列的最后一行是 id 5,依此类推。像这样:

A <- c(1, 5, 9, 11, 19,20)
B <- c(6, 8, 12, 18, NA, NA)
df.desired <- data.frame(A, B)
print(df.desired)
A B
1 1 6
2 5 8
3 9 12
4 11 18
5 19 NA
6 20 NA

有什么想法吗?非常感谢!

最佳答案

我们可以使用 data.table rleid 创建组,选择每个组中的第一行和最后一行并获取宽格式的数据。

library(dplyr)

df %>%
group_by(grp = data.table::rleid(author)) %>%
slice(1L, n()) %>%
group_by(author) %>%
mutate(grp = row_number()) %>%
tidyr::pivot_wider(names_from = author, values_from = id) %>%
select(-grp)

# A tibble: 6 x 2
# A B
# <int> <int>
#1 1 6
#2 5 8
#3 9 12
#4 11 18
#5 19 NA
#6 20 NA

对于评论中的更新请求,我们可以这样做:

df %>%
group_by(grp = data.table::rleid(author)) %>%
slice(1L, n()) %>%
mutate(author = row_number()) %>%
tidyr::pivot_wider(names_from = row, values_from = id) %>%
ungroup %>%
select(-grp)

# A tibble: 5 x 2
# `1` `2`
# <int> <int>
#1 1 5
#2 6 8
#3 9 11
#4 12 18
#5 19 20

关于根据 R 中的行号重组数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62809946/

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