从 Excel 获取下标到 R
Getting subscripts from Excel into R
我刚开始学习 R,但我已经遇到了第一个问题。我想在图表中显示我的数据。我的数据在 Excel sheet 中转换为 .csv sheet。但我的数据中有一些化学公式,如 Fe2O3,并且 .csv 所有下标都消失了。那看起来不太好。有什么方法可以将原始 Excel 文件中的下标放入 R 中吗?
非常感谢您的帮助:)
编辑:我的数据包含在 x 轴上显示的 6 个化学式,它们都包含下标(即 Fe2O3、ZnCl2、CO2 等)和在 y 轴上显示的数值。该图是条形图。我不确定是否有办法将数字更改为 R 中的下标或在导入之前保留它们。
图表看起来像这样。但我想将数字作为下标:
我不知道有什么方法可以将格式从 excel 导入 CSV,然后再导入 R,除非您可以使用 unicode 制作这些下标。 UTF8 symbols for subscript letters
鉴于您的化学物质列表很短,调整化学名称以帮助 ggplot 用下标解释它们并不需要太多工作。如果要包含更多元素,您需要在数字周围加上括号,然后加上波浪号。然后我们还告诉 scale_x_discrete
到 "parse" 标签并将这些符号转换为格式。
set.seed(42)
chem_df <- tibble(
Chemicals =
c("AgNO3", "Al2SiO5", "CO2", "Fe2O3", "FeSO4", "ZnCl2"),
Chemicals_parsed =
c("AgNO[3]", "Al[2]~SiO[5]", "CO[2]", "Fe[2]~O[3]", "FeSO[4]", "ZnCl[2]"),
Mean = rnorm(6, 50, 30))
ggplot(chem_df, aes(x=Chemicals_parsed, Mean)) + geom_col() +
scale_x_discrete(name = "Chemicals",
labels=parse(text=chem_df$Chemicals_parsed))
为了添加@JonSpring 的出色答案,您可以编写一个函数,将 ""Al2SiO5"
之类的字符串转换为 "Al[2]~SiO[5]"
之类的字符串,这样您就不必手动制作所有转化次数:
library(stringr)
chem.form <- function(s){
s <- str_replace_all(s,"([0-9]+)","[\1]~")
if(endsWith(s,"~")) s <- substr(s,1,nchar(s) - 1)
s
}
Chemicals <- c("AgNO3", "Al2SiO5", "CO2", "Fe2O3", "FeSO4", "ZnCl2")
Chemicals_parsed <- as.vector(sapply(Chemicals,chem.form))
我刚开始学习 R,但我已经遇到了第一个问题。我想在图表中显示我的数据。我的数据在 Excel sheet 中转换为 .csv sheet。但我的数据中有一些化学公式,如 Fe2O3,并且 .csv 所有下标都消失了。那看起来不太好。有什么方法可以将原始 Excel 文件中的下标放入 R 中吗? 非常感谢您的帮助:)
编辑:我的数据包含在 x 轴上显示的 6 个化学式,它们都包含下标(即 Fe2O3、ZnCl2、CO2 等)和在 y 轴上显示的数值。该图是条形图。我不确定是否有办法将数字更改为 R 中的下标或在导入之前保留它们。
图表看起来像这样。但我想将数字作为下标:
我不知道有什么方法可以将格式从 excel 导入 CSV,然后再导入 R,除非您可以使用 unicode 制作这些下标。 UTF8 symbols for subscript letters
鉴于您的化学物质列表很短,调整化学名称以帮助 ggplot 用下标解释它们并不需要太多工作。如果要包含更多元素,您需要在数字周围加上括号,然后加上波浪号。然后我们还告诉 scale_x_discrete
到 "parse" 标签并将这些符号转换为格式。
set.seed(42)
chem_df <- tibble(
Chemicals =
c("AgNO3", "Al2SiO5", "CO2", "Fe2O3", "FeSO4", "ZnCl2"),
Chemicals_parsed =
c("AgNO[3]", "Al[2]~SiO[5]", "CO[2]", "Fe[2]~O[3]", "FeSO[4]", "ZnCl[2]"),
Mean = rnorm(6, 50, 30))
ggplot(chem_df, aes(x=Chemicals_parsed, Mean)) + geom_col() +
scale_x_discrete(name = "Chemicals",
labels=parse(text=chem_df$Chemicals_parsed))
为了添加@JonSpring 的出色答案,您可以编写一个函数,将 ""Al2SiO5"
之类的字符串转换为 "Al[2]~SiO[5]"
之类的字符串,这样您就不必手动制作所有转化次数:
library(stringr)
chem.form <- function(s){
s <- str_replace_all(s,"([0-9]+)","[\1]~")
if(endsWith(s,"~")) s <- substr(s,1,nchar(s) - 1)
s
}
Chemicals <- c("AgNO3", "Al2SiO5", "CO2", "Fe2O3", "FeSO4", "ZnCl2")
Chemicals_parsed <- as.vector(sapply(Chemicals,chem.form))