gpt4 book ai didi

r - 在长数据集中添加两个分类变量的行?

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

我有一个长格式矩阵(面板数据),其中包含多个字符串变量、一个分类变量和一个带有数值的变量。

该数据包含特定年份各国多个工业部门的产出信息。我的想法是在同一国家/地区的相同年份添加其中两个行业,并更改新创建行业的名称。

例如,假设我有以下矩阵:

set.seed(10)

matrix <- cbind.data.frame(country = rep(c("aaa" , "bbb") , each = 6) , industry = rep(c("toys" , "paper") , each = 3 , times = 2) ,
year = rep(c(2000:2002) , times = 4) , production = sample(0:100 , 12) )

给出:

      country industry year   production
[1,] "aaa" "toys" "2000" "8"
[2,] "aaa" "toys" "2001" "73"
[3,] "aaa" "toys" "2002" "75"
[4,] "aaa" "paper" "2000" "54"
[5,] "aaa" "paper" "2001" "71"
[6,] "aaa" "paper" "2002" "53"
[7,] "bbb" "toys" "2000" "38"
[8,] "bbb" "toys" "2001" "82"
[9,] "bbb" "toys" "2002" "87"
[10,] "bbb" "paper" "2000" "14"
[11,] "bbb" "paper" "2001" "91"
[12,] "bbb" "paper" "2002" "41"

我想将每年和国家的“玩具”产量与“纸张”产量相加,并将新行业称为“玩具和纸张”,如下所示:

  year country       variable value
1 2000 aaa toys_and_paper 62
2 2000 bbb toys_and_paper 52
3 2001 aaa toys_and_paper 144
4 2001 bbb toys_and_paper 173
5 2002 aaa toys_and_paper 128
6 2002 bbb toys_and_paper 128

我知道如何使用 reshape2 和 tidyverse 来做到这一点,如下所示:

library(reshape2)
library(tidyverse)

test <- dcast(matrix , year + country ~ industry)

test <- test %>%
mutate(toys_and_paper = paper + toys) %>%
select(year , country , toys_and_paper)

test <- melt(test , id.vars = c("year" , "country"))

有更直接的方法吗?

最佳答案

我认为原来的问题有一个令人困惑的例子,因为在实际的数据集中可能有更多的行业。

这是一个包含两个以上行业的玩具数据集

set.seed(10)

matrix <- cbind.data.frame(
country = rep(c("aaa", "bbb"), each = 9),
industry = rep(c("toys", "paper", "other"), each = 3, times = 2),
year = rep(c(2000:2002), times = 6),
production = sample(0:100, 18)
)

以及问题的 dplyr 解决方案

matrix %>% 
dplyr::mutate(
industry = dplyr::if_else(
industry %in% c("toys", "paper"), "toys_and_paper", industry
)
) %>%
dplyr::group_by(
year,
country,
industry
) %>%
dplyr::summarise(
production = sum(production),
.groups = "drop"
)

如果在实际数据集中,industry 列是一个因素(而且它应该),那么您可以将 if_else() 语句替换为 forcats: :fct_unify()

关于r - 在长数据集中添加两个分类变量的行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68122231/

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