gpt4 book ai didi

r - 在 r 中将 2 列(从长形式转换为宽形式)扩展为 4 列

转载 作者:行者123 更新时间:2023-12-01 12:13:43 26 4
gpt4 key购买 nike

我有这种形式的数据

id  year    facname class_code       line_no    value
1 1 A County 1 county1
1 1 A County 2 county2
1 1 A source1 1 9
1 1 A source1 2 4
1 1 A source2 1 7
1 1 A source2 2 2
1 1 A source3 1 8...

2 1 B County 1 county1
2 1 B County 2 county1
2 1 B source1 1 21
2 1 B source1 2 9
2 1 B source2 1 4
2 1 B source2 2 7 ....

我正在尝试将其转换成类似这样的内容:(请注意,最后 3 列的值将相应地“展开”)

id year facname   line_no        County      source1        source2      source3
1 1 A 1 county1 9 7 8
1 2 A 2 county2 4 2 NA
1 3 A 3 county3
1 4 A 4 county4
2 1 B 1 county1
2 2 B 2 county2
2 3 B 3 county3
2 4 B 4 county4

这将显示不同数量的付款人 (source1,source2, source3) 和县所属的县名称 (county1, county2)。我知道它是传播(也可能是聚集)的某种组合,但我无法理解它。

感谢任何帮助,谢谢!
(PS:我知道这可能是一个重复的问题,但我对整理数据真的很陌生)

编辑:县(county1、2..等)实际上是数字(在原始数据集中)但本质上是分类的,所以我称它们为 county1,其他值(来源)实际上是该县参加事件的人(来源 1、来源 2 等)。每个设施总共有 40 个 line_no。

最佳答案

一个选项是使用双 tidyr::spread 作为:

更新:基于@CJYetman 的评论

library(dplyr)
library(tidyr)

# Just spread can transform and work on present sample data used by OP
df %>% spread(class_code, value)

#The complicated version below based was initially used to handle different
#line numbers for rows with "County" and rows without "County"
filter(df, class_code == "County") %>% spread(class_code, value) %>%
left_join(filter(df, class_code != "County") %>% spread(class_code, value),
by=c("id", "line_no", "facname"))

# id facname line_no County source1 source2 source3
# 1 1 A 1 county1 9 7 8
# 2 1 A 2 county2 4 2 <NA>
# 3 2 B 1 county1 21 4 <NA>
# 4 2 B 2 county1 9 7 <NA>

数据:

df <- read.table(text = 
"id facname class_code line_no value
1 A County 1 county1
1 A County 2 county2
1 A source1 1 9
1 A source1 2 4
1 A source2 1 7
1 A source2 2 2
1 A source3 1 8
2 B County 1 county1
2 B County 2 county1
2 B source1 1 21
2 B source1 2 9
2 B source2 1 4
2 B source2 2 7",
header = TRUE, stringsAsFactors = FALSE)

关于r - 在 r 中将 2 列(从长形式转换为宽形式)扩展为 4 列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49822968/

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