【问题标题】:Setting column classes and defining any factor levels, without using loops in R设置列类并定义任何因子水平,而不使用 R 中的循环
【发布时间】:2016-02-09 10:49:52
【问题描述】:

我一直在努力解决以下问题,因为我需要尽快从新数据集加载、操作和生成分数。我已经定义了一个数据字典,其中包含每个变量类的描述(例如数字、因子、字符、日期),并在适用的情况下,列出了所有可能的因子级别:

DD <- data.frame(Var = c("a", "b", "c", "d"),
Class = c("Numeric", "Factor", "Factor", "Date"),
Levels = c(NA, "B1, B2, B3", "C1, C2", NA))

Data <- data.frame(a = 5, b = "B1", c = "C2", d = "2015-05-01")

最终,我打算使用 model.matrix 生成具有一组通用指标变量/列的设计矩阵,而不管在特定数据集中观察到的实际因子水平如何,这样我就可以对来自特定模型的数据进行评分。

我需要尽快完成这些任务,因此,我试图找到一个避免使用 lapply/ 循环的解决方案。这是我现有的设置因子水平的解决方案(稍微复杂的版本),目前对于我的要求来说太慢了:

lapply(1:ncol(Data[,DD$Class=="Factor"]), function(i) {
    factor( as.character( unlist( Data[,DD$Class=="Factor"][i])) , 
    levels = unlist(strsplit(as.character(DD$Levels[DD$Class=="Factor"][i]), ", ")) )
}) 

如果可能的话,任何关于避免在此处使用循环的建议或任何替代解决方案都将不胜感激!

谢谢!

【问题讨论】:

  • 简而言之,您正在尝试根据列名将预定义级别分配给数据框 cols?
  • 感谢大家的回复,并为发错地方道歉!是的,我在尝试矢量化数据操作任务时面临的主要问题只是将预定义的级别分配给我的因素。

标签: r


【解决方案1】:

抱歉,我没有足够的声誉将此添加为评论。

请问: 1. 你的数据集的维度是多少? 2. 你可以满足的运行时间是多少?

您可以考虑使用 Microsoft Open R (Previsouly Revolution R),它优化了基本数据操作。

【讨论】:

  • 感谢您的回复。我通常会处理单行的数据帧,比如 100 列。我试图读取、转换和评分这些数据的运行时间不超过 50 毫秒。目前,我们的运行时间大约是这个持续时间的两倍,所以不会太远,但要找到进一步的效率节省证明是很棘手的!我看过(但没有尝试过 Microsoft R),但对我来说它如何加快这些任务的速度并不明显;在处理单行数据时,问题自然不会出现并行化。
猜你喜欢
  • 2022-12-18
  • 2018-07-05
  • 1970-01-01
  • 2014-05-08
  • 1970-01-01
  • 2012-07-10
  • 1970-01-01
  • 2012-07-20
  • 1970-01-01
相关资源
最近更新 更多