如何使用R中的分隔符在因子类型列中拆分条目?

时间:2015-09-07 10:08:11

标签: r reshape

在使用融合功能(来自reshape2包)后,我有一个看起来像这样的数据集:

 CO2AndProd <- melt(CO2AndProd, id.vars = "y")
 head(CO2AndProd)

结果:

         y          variable              value
1 2015 gas-CCG;co2noramp 32578115.707861189
2 2016 gas-CCG;co2ramp 28516257.629492953
3 2017 hydro;co2noramp  28345649.67523421
4 2018 hydro;co2ramp 29054823.023870178

我想将变量列分成两列,如下所示:

      variable1        variable2
 gas-CCG               co2noramp 
 gas-CCG               co2ramp 
 hydro                 co2noramp  
 hydro                 co2ramp 

所以我尝试将列转换为字符以便使用strsplit,但因为melt()使变量列成为因子数据类型,所以会发生这种情况:

 CO2AndProd[2] <- as.character(CO2AndProd[2])

Result(see snapshot)] 1

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:2)

您可以尝试separate中的tidyr

library(tidyr)
separate(df, variable, c('variable1','variable2'), sep=';', remove=F)
#     y          variable variable1 variable2    value
#1 2015 gas-CCG;co2noramp   gas-CCG co2noramp 32578116
#2 2016   gas-CCG;co2ramp   gas-CCG   co2ramp 28516258
#3 2017   hydro;co2noramp     hydro co2noramp 28345650
#4 2018     hydro;co2ramp     hydro   co2ramp 29054823

或以R为基础gsub

pattern = "(.*);(.*)"
transform(df, variable1 = gsub(pattern, "\\1", df$variable),
              variable2 = gsub(pattern, "\\2", df$variable))

或以R为基础strsplit

cbind(df, do.call(rbind, strsplit(as.character(df$variable), ';')))