【发布时间】:2016-05-30 21:59:08
【问题描述】:
我是 R 新手,我研究过矢量化。但我仍在努力训练我的思维以矢量化的方式思考。很多时候,向量化而不是循环的例子要么太简单,所以我很难概括它们,要么根本不存在。
谁能建议我如何矢量化以下内容?
Model2 <- subset(Cor.RMA, MODEL == Models.Sort[2,1])
RCM2 <- count(Model2$REPAIR_CODE)
colnames(RCM2) <- c("REPAIR_CODE", "FREQ")
M2M <- merge(RCM.Sort, RCM2, by = "REPAIR_CODE", all.x = TRUE)
M2M.Sort <- M2M[order(M2M$FREQ.x, decreasing = TRUE), ]
M2M.Sort[is.na(M2M.Sort)] <- 0
以上代码中,每个“2”需要从2到85运行
writeWorksheetToFile(file="CL2 - TC - RC.xlsx",
data = M2M.Sort[ ,c("FREQ.y")],
sheet = "RC by Model",
clearSheets = FALSE,
startRow = 6,
startCol = 6)
在上面的代码中,“data”应该从“M2M...”到“M85M...”,“startCol”应该从 6 到 89 运行以进行 Excel 打印输出。
来自 (Cor.RMA) 的数据框包含“MODEL”、“REPAIR_CODE”列和其他未使用的列。 RCM.Sort 是所有模型中每个“REPAIR_CODE”的频率表,我用作主列表以连接特定于设备的修复代码计数。 (左连接:all.x = TRUE) Models.Sort 是我使用 plyr 包中的“count”函数生成的频率表,因此我可以为每个模型创建子集。 然后我合并使用“唯一”函数生成的每个“修复代码”的列表。
样本数据:
CASE_NO DEVICE_TYPE MODEL TRIAGE_CODE REPAIR_CODE
12341 Smartphone X TC01 RC01
12342 Smartphone Y TC02 RC02
12343 Smartphone Z TC01, TC05 RC05
12344 Tablet AA TC02 RC37
12345 Wearable BB TC05 RC37
12346 Smartphone X TC07 RC01
12347 Smartphone Y TC04 RC02
如果您愿意提供帮助,我非常感谢您的时间和精力。
【问题讨论】:
-
您能提供一个样本数据集吗?这将使您更容易理解您要做什么。另外,您忘记定义
RCM.Sort。据我所知,您只是想将count应用于$REPAIR_CODE以获取Models.Sort[2:85,1],对吗? -
我已按照您的建议对查询进行了 2 处更改。是的,我需要按照您的建议申请
count,然后将其输入到合并过程中。 -
aggregate(Cor.RMA$REPAIR_CODE,list(Cor.RMA$MODEL),table)怎么样?这不是您想要的,但我认为无论如何这将是一种更连贯的格式。 -
唯一的问题是控制台中显示的结果与保存为对象时的结果不同,因此无法正常打印到 Excel。
-
解决了,看答案。
标签: r vectorization