在使用融合功能(来自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])
有人可以帮忙吗?
答案 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), ';')))