r - 参考函数 r 中的数据框
问题描述
我正在尝试清理许多具有相同初始结构的数据帧。因此,我想:
- 编写代码以清理一个数据帧
- 为该代码编写一个函数
- 创建数据框列表
- 使用 map(purr 包)迭代我在数据框列表上创建的函数。
我遇到的问题是如何让函数更新数据框,以便我将干净的数据框保存为对象。
为了明确这一点:
创建一个示例数据框(所有数据框具有相同的格式):
> df <- data.frame(X.1 = c("last.update", "trial.a", c(4,5,7)), X.2 = c("12/01/16", "trial.b", c(3,5,6)), stringsAsFactors = F)
> df
X.1 X.2
1 last.update 12/01/16
2 trial.a trial.b
3 4 3
4 5 5
5 7 6
编写代码以生成干净的数据帧:
> colnames(df) <- df[2, ]
> df <- df[-c(1,2), ]
> df
trial.a trial.b
3 4 3
4 5 5
5 7 6
所以我写了一个函数:
scrub <- function(x) {
colnames(x) <- x[2, ]
x <- x[-c(1,2), ]
}
如果我将擦洗应用于原始数据框,则不会发生任何事情:
> df <- data.frame(X.1 = c("last.update", "trial.a", c(4,5,7)), X.2 = c("12/01/16", "trial.b", c(3,5,6)), stringsAsFactors = F)
> scrub <- function(x) {
+ colnames(x) <- x[2, ]
+ x <- x[-c(1,2), ]
+ }
> scrub(df)
> df
X.1 X.2
1 last.update 12/01/16
2 trial.a trial.b
3 4 3
4 5 5
5 7 6
相反,为了获得干净的数据帧,我必须重新编写函数,使其不引用主体第二行中的 x,然后我必须在数据帧上调用函数并将结果分配给对象:
> scrub <- function(x) {
+ colnames(x) <- x[2, ]
+ x[-c(1,2), ]
+ }
> df <- scrub(df)
> df
trial.a trial.b
3 4 3
4 5 5
5 7 6
那么问题是我想在多个数据帧上映射(purr 包)这个函数。这意味着我需要该函数来输出更新的数据帧。如果引用正文第二行中的数据框不起作用,我该如何实现。
我确信这是一个简单的问题,但我似乎无法解决。
注意:实际上,清理这些数据帧的代码将比更改列名和删除不相关的行做更多的事情。
解决方案
让我们构建一个scrub
带有显式返回的漂亮函数:
scrub <- function(x) {
colnames(x) <- x[2, ]
x <- x[-c(1,2), ]
return(x)
}
证明它有效:
> df
X.1 X.2
1 last.update 12/01/16
2 trial.a trial.b
3 4 3
4 5 5
5 7 6
> scrub(df)
trial.a trial.b
3 4 3
4 5 5
5 7 6
上面我们看到了原始数据,并且scrub(df)
删除了两行。但是, 的输出scrub(df)
尚未保存。df
没有被修改,因为我们没有scrub(df)
用<-
.
接下来我们将展示原始数据仍然存在于df
. 然后我们将清理后的版本分配回df
,覆盖原始版本,并显示df
现在已修改:
> df
X.1 X.2
1 last.update 12/01/16
2 trial.a trial.b
3 4 3
4 5 5
5 7 6
> df <- scrub(df) ## assign the result of scrub(df)
> df
trial.a trial.b
3 4 3
4 5 5
5 7 6
现在df
已被擦洗,结果已保存。
推荐阅读
- javascript - 来自 Android App 和 Chrome 的 WebRTC P2P 视频流每秒冻结
- android - 在Android中使用edittext过滤搜索后单击Listview错误位置
- javascript - 页面刷新后不存储本地存储
- php - 从另一台服务器接收 http post 时出现错误 403
- django - React 和 Django 部署
- javascript - 为什么重新分配导入的对象会抛出 ReferenceError?
- excel - 如何使用公式将单元格值插入到excel中的句子中?
- android - Picasso 不通过移动网络加载图像?
- awk - 循环中数组索引的 GNU awk 怪异
- docker - Nginx 上游不适用于 docker deploy 堆栈