【发布时间】:2014-09-10 14:30:09
【问题描述】:
问题设置:创建一个函数以获取由 ID 列选择的多个 CSV 文件并组合成 1 个 csv,然后按 ID 创建一个观察数的输出。
预期:
complete("specdata", 30:25) ##notice descending order of IDs requested
## id nobs
## 1 30 932
## 2 29 711
## 3 28 475
## 4 27 338
## 5 26 586
## 6 25 463
我明白了:
> complete("specdata", 30:25)
id nobs
1 25 463
2 26 586
3 27 338
4 28 475
5 29 711
6 30 932
这是“错误的”,因为它是按 id 排序的。
我从中读取的 CSV 文件确实具有降序排列的数据。我的sn-p:
dfTable<-read.csv("~/progAssign1/specdata/tmpdata.csv")
ccTab<-complete.cases(dfTable)
xTab3<-as.data.frame(table(dfTable$ID[ccTab]),)
colnames(xTab3)<-c("id","nobs")
据我所知,第三行是排序发生的地方。我打破了表达式,它发生在 table() 调用中。我没有找到任何可以传递的选项或参数来制作类似 sort=FALSE 的东西。你会想……
无论如何。任何帮助表示赞赏!
【问题讨论】:
-
我只想重新排序来自
table的输出,请参阅order。如果你想了解 R-way-of-doing-things 我会看看dplyr包和任何其他 Hadley Wickham 包。 -
回答你的问题:
table中没有隐藏开关(它依赖于tabulate,它本身依赖于 C 函数)=> 所以你必须自己重新排序。 -
@PaulHiemstra 我会认为 dplyr 是一个很好的方式来看待做事的“R-way”。使用中缀运算符并从左到右传递结果并不是 R 编程的典型做法。我同意,一旦你学会了“功能性地”思考(通过在函数中包含参数),dplyr 非常光滑并且是对 R 世界的真正礼物,但在我看来,它是 R 来自有点非典型(但公认优雅) 观点。
-
我不理解您反复抱怨希望制表操作的输入顺序会受到输入顺序的影响。无论那是什么,这似乎都不是“现代”计算机语言的标志。 R 不是 SAS,也不是 C,也不是 C++。它是一个统计工作台。进步的唯一方法是关注底层结构,学会使用
list、tapply、ave、“[”、“[[”、order、match和merge。然后您可以决定是否要使用 data.table 或 dplyr 或 reshape2,因为每个本质上都是基本 R 的一个分支。 -
@BondedDust:我没有抱怨。我在观察。