首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在R中更干净地修改数据框中的列-可以使用with()或apply()?

在R中更干净地修改数据框中的列-可以使用with()或apply()?
EN

Stack Overflow用户
提问于 2012-04-04 03:38:50
回答 2查看 1.6K关注 0票数 1

我知道在R中对重复的事情的答案通常是"apply()“而不是循环。对于我经常创建的一些讨厌的代码,有没有更好的R设计模式?

因此,在从HTML中提取表格数据时,我通常需要更改数据类型,最后运行类似这样的操作,将第一列转换为日期格式(从小数开始),并将字符串中的第2-4列从带有逗号的字符串(如"2,400,000“)转换为数字”2400000“。

代码语言:javascript
复制
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-一个将当前列重新分配给适当修改过的版本的函数?”

我不想创建一个完整的,可重复的清理函数,真的,只是一个快速的匿名函数,以更少的重复来做这件事。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-04-04 04:15:18

假设X是一个数据框,我会这样做:

代码语言:javascript
复制
X[2:4] <- lapply(X[2:4], function (x) as.numeric(gsub(",", "", x)))
票数 5
EN

Stack Overflow用户

发布于 2012-04-04 03:45:15

就像这样

代码语言:javascript
复制
comma2numeric <- function(x) { as.numeric(gsub(",","",x)) }
X[,2:4] <- apply(X[,2:4],2,comma2numeric)

是一个开始。transform是一种很好的就地修改习惯用法,但它使用名称而不是列号进行操作。

编辑的:第1行缺少右括号

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10000157

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档