首页 > 解决方案 > R中的数据转换:将一个级别一分为二

问题描述

我有一个 df,其中包含 2003 年输入的国家级数据。

几行数据属于一个名为“南斯拉夫联邦共和国”的国家。

今天这是两个不同的国家,我想复制这些数据行,以便我可以将每组行重命名为其各自的现代国家名称。

data.frame(Country = "Yugoslavia", Chickens = 567)

使用这个最小的例子,我如何创建这个数据框?

data.frame(Country = c("Serbia", "Montenegro"), Chickens = 567)

标签: rdata-science

解决方案


您可以在一个tidyverse管道中执行以下操作:

library(tidyverse)
df2 <- df %>%
  mutate(Country = if_else(Country == "Yugoslavia", "Serbia", as.character(Country))) %>%
  bind_rows(df) %>%
  mutate(Country = if_else(Country == "Yugoslavia", "Montenegro", as.character(Country)))

您也可以使用mutate_if而不是if_else语句。

     Country Chickens
1     Serbia      567
2 Montenegro      567

默认情况下data.frame,将字符列转换为因子。上面的替换强制转换为字符。

如果要保留因子类,则只需添加:

%>% mutate(Country = as.factor(Country))

... 在最后。


推荐阅读