在 R 中重新格式化多列的函数

问题描述 投票:0回答:1

我在

R
中有五个数据框,在每个数据框中,我都有一个标题为
DOB
的列用于出生日期,另一列标题为
StudentID
以及其他变量。但是,我想要一个函数,它将每个数据框中的
DOB
列重新格式化为这种格式
%m/%d/%y
并将
DOB
变量转换为字符类变量。我也想用同样的函数将 StudentID 变量转换为数字。

有没有办法开发一个函数来实现上述目标而不影响数据集中的其他变量?

到目前为止,我一直在使用以下代码手动进行重新格式化和转换:

df1$DOB<-as.Date(df1$DOB, format = "%m/%d/%y")
df1$DOB<-as.character(df1$DOB)
df1$StudentID <- as.numeric(df1$StudentID)

df2$DOB<-as.Date(df2$DOB, format = "%m/%d/%y")
df2$DOB<-as.character(df2$DOB)
df2$StudentID <- as.numeric(df2$StudentID)

df3$DOB<-as.Date(df3$DOB, format = "%m/%d/%y")
df3$DOB<-as.character(df3$DOB)
df3$StudentID <- as.numeric(df3$StudentID)

df4$DOB<-as.Date(df4$DOB, format = "%m/%d/%y")
df4$DOB<-as.character(df4$DOB)
df4$StudentID <- as.numeric(df4$StudentID)

df5$DOB<-as.Date(df5$DOB, format = "%m/%d/%y") 
df5$DOB<-as.character(df5$DOB)
df5$StudentID <- as.numeric(df5$StudentID)

感谢您对此的帮助!

我还没有尝试为此做一个函数,因为我还不是很擅长做函数。

r rstudio data-manipulation reformatting
1个回答
0
投票

我们可以将 data.frames 放在一个列表中并循环调用函数:

library(dplyr)

my_data_frames <- list(df1, df2, df3, df4)

my_function <- function(df) {
    df %>%
    mutate(DOB = as.character(as.Date(DOB, format = "%m/%d/%y")),
           StudentId = as.numeric(StudentId)
    }


lapply(my_data_frames, my_function)
© www.soinside.com 2019 - 2024. All rights reserved.