gpt4 book ai didi

r - 基于两列修改R数据框

转载 作者:行者123 更新时间:2023-12-04 09:36:27 26 4
gpt4 key购买 nike

我正在尝试修改以下 R 数据框:

Column1         Column2            Value1            Value2
Parent1 Child1 3 12
Parent1 Child2 4 12
Parent1 Child3 5 12
Parent2 Child4 2 9
Parent2 Child5 6 9
Parent2 Child6 1 9

我想将“父”条目放在“子”条目上方,并将值从“Value2”移动到“Value1”。新的数据框是这样的:

Column2         Value1            
Parent1 12
Child1 3
Child2 4
Child3 5
Parent2 9
Child4 2
Child5 6
Child6 1

这可以使用 dplyr 完成吗?另外,有没有办法在“子”条目中添加任何额外的空格?

感谢任何见解。

最佳答案

准备数据

library(tidyverse)
data <- read_delim(
"Column1 Column2 Value1 Value2
Parent1 Child1 3 12
Parent1 Child2 4 12
Parent1 Child3 5 12
Parent2 Child4 2 9
Parent2 Child5 6 9
Parent2 Child6 1 9",delim = " "
) %>%
mutate_all(~str_remove_all(.x," "))
colnames(data) <- str_remove_all(colnames(data)," ")

使用 tidyr::nest() 来“清理”数据,这样我们就可以逐行迭代数据帧。

nested_data <- data %>%
group_by(Column1,Value2) %>%
nest()
> nested_data
# A tibble: 2 x 3
Column1 Value2 data
<chr> <chr> <list>
1 Parent1 12 <tibble [3 x 2]>
2 Parent2 9 <tibble [3 x 2]>

然后使用 pmap_df() 构造所需的输出。

pmap_df(nested_data,function(...){
values = list(...)
bind_rows(
tibble(
Column2 = values$Column1,
Value1 = values$Value2
)
,
values$data %>%
mutate(Column2 = paste0(" ",Column2)) # add white space
)
})

# A tibble: 8 x 2
Column2 Value1
<chr> <chr>
1 Parent1 12
2 " Child1" 3
3 " Child2" 4
4 " Child3" 5
5 Parent2 9
6 " Child4" 2
7 " Child5" 6
8 " Child6" 1

关于r - 基于两列修改R数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57877674/

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