【问题标题】:Getting subscripts from Excel into R从 Excel 获取下标到 R
【发布时间】:2019-02-20 16:27:24
【问题描述】:

我刚开始学习 R,但我已经遇到了第一个问题。我想在图表中显示我的数据。我的数据位于转换为 .csv 工作表的 Excel 工作表中。但是我的数据中有一些像 Fe2O3 这样的化学公式,而 .csv 中的所有订阅都消失了。这看起来不太好。有没有办法将原始 Excel 文件中的下标转换为 R? 非常感谢您的帮助:)

编辑:我的数据包含在 x 轴上显示的 6 个化学公式,它们都包含下标(即 Fe2O3、ZnCl2、CO2、...)和在 y 轴上显示的数值。该图是条形图。我不确定是否有办法将数字更改为 R 中的订阅者或在导入之前保留它们。

图表如下所示。但我想将数字作为下标:

【问题讨论】:

  • 不是完全重复,但this question 展示了如何在 R 图中获取下标。要获得进一步的帮助,如果您提供可重复的数据会有所帮助。见How to make a great R reproducible example?
  • 除了数据,你能不能给我们举个简单的例子来说明你想要制作的那种图表?

标签: r excel graph subscript


【解决方案1】:

我不知道有没有办法将格式从 excel 转换为 CSV,然后转换为 R,除非您可以使用 unicode 制作这些下标。 UTF8 symbols for subscript letters

鉴于您的化学物质列表很短,调整化学名称以帮助 ggplot 用下标解释它们的工作并不多。如果要包含更多元素,您需要在数字周围加上括号,然后加上波浪号。然后我们还告诉scale_x_discrete“解析”标签并将这些符号转换为格式。

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))

【讨论】:

    【解决方案2】:

    为了补充@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))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多