我知道在R中对重复的事情的答案通常是"apply()“而不是循环。对于我经常创建的一些讨厌的代码,有没有更好的R设计模式?
因此,在从HTML中提取表格数据时,我通常需要更改数据类型,最后运行类似这样的操作,将第一列转换为日期格式(从小数开始),并将字符串中的第2-4列从带有逗号的字符串(如"2,400,000“)转换为数字”2400000“。
X[,1] <- decYY2YY(as.numeric(X[,1]))
X[,2] <- as.numeric(gsub(",", "", X[,2]))
X[,3] <- as.numeric(gsub(",", "", X[,3]))
X[,4] <- as.numeric(gsub(",", "", X[,4]))我不喜欢我有X,数字在左边和骑行两边都重复,或者我有基本上相同的声明重复2-4。
有没有一种非常R风格的方法来减少X,2的重复,但仍然没有循环?写着“将此应用于列2,3,4-一个将当前列重新分配给适当修改过的版本的函数?”
我不想创建一个完整的,可重复的清理函数,真的,只是一个快速的匿名函数,以更少的重复来做这件事。
发布于 2012-04-04 04:15:18
假设X是一个数据框,我会这样做:
X[2:4] <- lapply(X[2:4], function (x) as.numeric(gsub(",", "", x)))发布于 2012-04-04 03:45:15
就像这样
comma2numeric <- function(x) { as.numeric(gsub(",","",x)) }
X[,2:4] <- apply(X[,2:4],2,comma2numeric)是一个开始。transform是一种很好的就地修改习惯用法,但它使用名称而不是列号进行操作。
编辑的:第1行缺少右括号
https://stackoverflow.com/questions/10000157
复制相似问题