【问题标题】:Convert numbers nested inside levels of factor to numeric vector将嵌套在因子级别内的数字转换为数字向量
【发布时间】:2019-02-21 17:12:31
【问题描述】:

经过大量搜索,我不相信有人问过这个问题,并且我认为这里有人可以找到比我更快的解决方法。

我有一个因子变量,其中每个 观察 包含 29 个嵌套数字:

    dataframe$variable <- [1] -5.04849486  -4.17954852  -7.00735591 -3.93680666 -3.36135959  -5.89856992  -3.28262102  -4.95040133  -4.52287533  -6.55458896 -6.08302617  -5.45365319  -5.35542788  -6.49870823  -9.08663504 -10.83126787 -10.83991976 -10.96286352 -11.47911528 -11.45937234 -10.96341187 -12.33917811 -13.49123764 -13.09288624 -12.53887413 -12.66352061 -14.43587376 -14.96183082 -15.73399282
[2] -6.69620919  -7.40672798  -8.3530468   -7.91598217  -7.83297636  -8.37460146  -8.73916205  -9.20744225  -9.3282853   -9.50299118  -9.92630917 -10.24373155 -10.49520522 -10.41014364 -10.25805992 -10.52294616 -11.27053953 -11.85528256 -12.62743692 -13.35299167 -13.25576965 -13.56397075 -13.70361862 -13.97438053 -14.24976232 -14.10028664 -14.06066972 -14.57621329 -15.45692947 
[3] -3.86805776  -2.57038981  -4.88910112  -3.82336021  -1.51641245  -4.19533412  -3.52909675  -3.86380061  -4.77176809  -4.84617525  -6.59760906  -7.02974036  -6.16868245  -6.74446232  -7.4624311  -7.93993982  -9.27617985 -10.12415032 -10.498118   -10.72502719 -10.71480081 -10.58232787 -11.24845809 -11.24984636 -10.72254205 -11.23331293 -12.7042161  -13.16813511 -14.49287153
etc. 

现在我需要在变量中的每个观察值之间执行一些基本计算(例如 diff

如何将“变量”的每个级别转换为数字向量,以便计算观察值之间的差异?在每个数字之间添加逗号?强制转换?

编辑:询问如何转换数据结构,而不是执行计算。我已经把那部分写好了。

【问题讨论】:

  • 你要[1]-[2]然后是[1]-[3]还是[2]-[3]???
  • 我已经有一个循环来进行计算。我只需要每个观察值都在一个数字结构中,以便循环执行。
  • 能否提供您的数据的小样本,以便我们查看数据结构。解决这个问题的方法很大程度上取决于这种结构。您可以在这里使用dput 示例:stackoverflow.com/questions/5963269/…

标签: r vector numeric


【解决方案1】:

很难看到您拥有的确切数据结构(例如,每个案例包含 3 个向量的列表?),但这种方法或稍作修改可能会奏效:

library(tidyverse)
dataframe <-
  dataframe %>% 
# data extracted to a vector
  mutate(variable_sep = str_extract_all(variable, "[-0-9\\.]+")) %>% 
# convert to a numeric vector
  mutate(variable_numeric = map(variable_sep,  ~as.numeric(.x)))

上述解决方案是“tidyverse”语法。 这是常规的基本 R 语法。

dataframe$variable_sep <- str_extract_all(dataframe$variable, "[-0-9\\.]+")
dataframe$variable_numeric <- lapply(dataframe$variable_sep , FUN = as.numeric)

【讨论】:

  • as.numeric 之前的 ~ 符号是什么? x 应该是什么?
  • 看起来您的数据需要被提取为“向量列表”,然后您可以将函数应用于这些向量。我的示例是使用purrr::map,它基本上是lapply 的一个版本。我将添加一个可能更容易理解的基本 R 版本; purrr 的教程可以在这里找到:jennybc.github.io/purrr-tutorial
  • ~formula 符号基本上是说“将此函数(as.numeric)应用于向量列表中的每个元素(.x)。
  • 请注意,lapply 只是自动执行“循环”过程,因此您无需编写循环。
  • 太好了。非常感谢!您的“lapply”语法实际上允许我在脚本的其他地方使用 for 循环。这让我整个下午都感到困惑,所以谢谢你的解决方案!
猜你喜欢
  • 2017-05-14
  • 1970-01-01
  • 1970-01-01
  • 2015-06-01
  • 2018-08-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多