r - 如何编写一个函数来以相同的方式操作多个数据帧?
问题描述
完全新手。我不知道如何编写函数。我有几个数据框都需要以相同的方式进行操作,并且输出应该是具有相同名称的数据框。我有可以操作单个数据帧的功能代码。我希望能够一次操纵几个。
以下是 2 个示例 df:
ex1 <- structure(list(info1 = c("Day", "2018.04.03 10:47:33", "2018.04.03 11:20:04", "2018.04.03 11:35:04"), info2 = c("Status_0", "Ok", "Ok", "Ok"
), X = c(200L, 1L, 2L, 3L), X.1 = c(202.5, 1, 2, 3), X.2 = c(205L,
1L, 2L, 3L), X.3 = c(207.5, 1, 2, 3), X.4 = c(210L, 1L, 2L, 3L
), X.5 = c(212.5, 1, 2, 3), X.6 = c(215L, 1L, 2L, 3L)), class = "data.frame", row.names = c(NA, -4L))
ex2 <- structure(list(info1 = c("Day", "2018.04.10 12:47:33", "2018.04.10 13:20:04", "2018.04.10 13:35:04"), info2 = c("Status_0", "Ok", "Ok", "Ok"
), X = c(200L, 1L, 2L, 3L), X.1 = c(202.5, 1, 2, 3), X.2 = c(205L,
1L, 2L, 3L), X.3 = c(207.5, 1, 2, 3), X.4 = c(210L, 1L, 2L, 3L
), X.5 = c(212.5, 1, 2, 3), X.6 = c(215L, 1L, 2L, 3L)), class = "data.frame", row.names = c(NA, -4L))
这是操作“ex1”的功能代码
library(tidyverse)
library(lubridate)
colnames(ex1) <- ex1[1,]
ex1 <- ex1 %>%
slice(-1) %>%
rename(Date.Time = "Date/Time") %>%
mutate(timestamp = parse_date_time(Date.Time, "%Y.%m.%d %H:%M:%S")) %>%
select(timestamp, Date.Time, everything()) %>% select(-Date.Time) %>%
select(-c(Status_0:"202.5", "212.5":"215"))
colnames(ex1)[-1] <- paste("raw", colnames(ex1)[-1], sep = "_")
第二个问题:假设我想改变函数,让它接受一个df,但也接受一个类型(即raw或comp),函数输入是tidydatafunc(df,type)。如果我输入 type=comp 它会将代码的最后一行“raw”更改为“comp”。我怎样才能改变功能来适应这个?
任何帮助是极大的赞赏。我相信这对你们大多数人来说是基本的东西!
解决方案
将脚本包装在函数中并指定参数。
my_fun <- function(df, type = 'comp') {
# basic input validation is extremely useful
stopifnot(is.data.frame(df))
stopifnot(is.character(type))
colnames(df) <- df[1,]
ex1 <- df %>%
slice(-1) %>%
rename(Date.Time = "Date/Time") %>%
mutate(timestamp = parse_date_time(Date.Time, "%Y.%m.%d %H:%M:%S")) %>%
select(timestamp, Date.Time, everything()) %>% select(-Date.Time) %>%
select(-c(Status_0:"202.5", "212.5":"215"))
# pass the character type
colnames(df)[-1] <- paste(type, colnames(df)[-1], sep = "_")
return(df)
}
然后你就可以使用它了。
my_fun(ex1, "comp") # view
new_ex1 <- my_fun(ex1, "comp") # save to variable new_ex1
推荐阅读
- linq - EF core 2第一次查询慢
- laravel - 从 laravel 的 storage/app/public 文件夹中渲染图像
- haskell - Yesod - 将 Yesod-Auth-Account 1.4.3 与脚手架站点集成
- ruby-on-rails - rails paper_trail 在新服务器中迁移失败
- javascript - 根据值自定义颜色(多次)
- javascript - req.body.variable 名称在节点 js 中显示未定义的值
- go - Goroutine 执行了几秒钟但停止了
- angularjs - 访问父指令中子指令变量的值
- spring - “spring.datasource.testWhileIdle”是一个未知属性。您的意思是“spring.datasource.tomcat.abandon-when-percentage-full”吗?
- java - java.lang.ClassNotFoundException: org.springframework.web.servlet.DispatcherServlet 异常