用于更新存储在变量中的数据框名称的功能

时间:2019-07-11 08:07:16

标签: r

我必须为我正在处理的项目将某些日期转换为字符格式,以使代码更整洁,我想编写一个函数,该函数传递数据框的名称(可能还包括列名称)例如,它不会更改,因此可以进行硬编码),并为每个格式进行格式化,而不必为格式化列的每个数据帧重复整行。

这有可能吗?我做了很多谷歌搜索,似乎找不到答案。

kpidataRM$Period <- format(kpidataRM$Period, "%b-%y")
kpidataAFM$Period <- format(kpidataAFM$Period, "%b-%y")
kpidataNATIONAL$Period <- format(kpidataNATIONAL$Period, "%b-%y")
kpidataHOD$Period <- format(kpidataHOD$Period, "%b-%y")

1 个答案:

答案 0 :(得分:0)

要回答您的特定问题,您可以创建一个非常简单的函数,如下所示:

# Your function here takes as input the dataframe name (df) and formats the predefined column (Period)
new_function <- function(df){
  df$Period <- format(df$Period, "%b-%y")
  return(df)
}

然后运行

df1 <- new_function(df1)
df2 <- new_function(df2)
对于每个数据框

(例如,在示例中 df1 将为 kpidataRM )。如果您希望将列也作为变量包含在函数中,则可以这样编写:

# Your function here takes as input the dataframe name (df) and column name (col) and formats it.
new_function2 <- function(df, col){
  df[[col]] <- format(df[[col]], "%b-%y")
  return(df)
}

但是,我想说这不是这种情况下的最佳方法,因为您似乎只想以一种特定的方式格式化一组数据帧中的一组列。我反而提出的建议,正像Roland那样,是列出数据帧并遍历每个元素。一个简单的示例如下所示:

# Push all your dataframes in a list (dflist)
dflist <- list(df1,df2)
# Apply in this list a function that changes the column format (lapply)
dflist <- lapply(dflist, function(x){x[[Period]] <- format(x[[Period]], "%b-%y")})

希望这对您有用。