【问题标题】:R function to map SI prefixes to their valuesR函数将SI前缀映射到它们的值
【发布时间】:2021-09-11 23:59:47
【问题描述】:

我有一些格式很差的数据;键列默认为字符,因为它具有符号(例如 ? 和 -)、字母和数字值。有大约 20 个唯一值。我想将该列中的所有内容映射到一个新列,该列是 SI base 10 幂的集合。我已经尝试使用 dplyr recode() 函数执行此操作,但没有成功。这是我拥有的数据的一个示例:

df <- data.frame(Type = letters[1:5], Value = c(5.2, 7, 42.5, 
1, 0.3), Exp = c("m", "k", "b", "6", "?"))

structure(list(Type = c("a", "b", "c", "d", "e"), 
Value = c(5.2, 7, 42.5, 1, 0.3), Exp = c("m", "k", "b", 
"6", "?")), class = "data.frame", row.names = c(NA, -5L))

exp 变量是一团糟——我想我需要能够将m 映射到10^6(用于“百万”),k10^3(用于“千”),等等。plyr 中的mapvalues() 函数可以工作,但dplyrplyr 之间的冲突太多,我无法同时加载。

【问题讨论】:

  • 请用dput 显示几行数据进行测试。塔恩克斯
  • 欢迎来到 SO!您能否使用dput 向我们提供样本,以便我们理解您的意思:我不明白如何将具有符号的变量更改为 SI 值

标签: r dplyr mapping


【解决方案1】:

我只需创建一个包含映射的表并将其连接到数据框:

df <- data.frame(Type = letters[1:5], 
    Value = c(5.2, 7, 42.5, 1, 0.3),
    Exp = c("m", "k", "b", "6", "?"))


units <- structure(list(SI = c("m", "k", "b", "6", "?"), 
    factor = c("1,00E+06", "1,00E+03", "1,00E+09", NA, NA)),
    class = "data.frame", row.names = c(NA, -5L))

df %>% left_join(units, by=c(Exp="SI"))

  Type Value Exp   factor
1    a   5.2   m 1,00E+06
2    b   7.0   k 1,00E+03
3    c  42.5   b 1,00E+09
4    d   1.0   6     <NA>
5    e   0.3   ?     <NA>

【讨论】:

  • 如果是少量的点,那么加入原始数据框就可以了,但是它们没有任何顺序,而且数量很多。跨度>
  • 如果您正在寻找一种自动方法来查找 SI 单位的正确前缀,那么您应该重新表述您的问题。可以发dput(unique(df$Exp))吗?
猜你喜欢
  • 2012-07-05
  • 2011-03-19
  • 2023-04-03
  • 1970-01-01
  • 2023-01-15
  • 1970-01-01
  • 1970-01-01
  • 2016-10-11
  • 2011-10-20
相关资源
最近更新 更多