【问题标题】:How do I split an entry in the factor type column using a separator in R? [duplicate]如何使用R中的分隔符分离因子类型列中的条目? [复制]
【发布时间】:2015-12-02 20:32:14
【问题描述】:

我有一个数据集,在使用了 melt 函数(来自 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

有人可以帮忙吗?

【问题讨论】:

  • 没看到你想用strsplit,我更新了这个效果的答案。

标签: r reshape


【解决方案1】:

您可以从tidyr 尝试separate

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), ';')))

【讨论】:

    猜你喜欢
    • 2016-07-11
    • 2016-07-07
    • 1970-01-01
    • 1970-01-01
    • 2011-03-18
    • 2017-05-13
    • 1970-01-01
    • 2019-04-13
    • 2021-02-09
    相关资源
    最近更新 更多