R:访问数据框和循环

时间:2019-03-18 08:51:40

标签: r dataframe for-loop

no1_date_count <- data.frame(table(cate_no1$date_id))
no1_date_count$Var1 <- ymd(no1_date_count$Var1)# date format

no2_date_count <- data.frame(table(cate_no2$date_id))
no2_date_count$Var1 <- ymd(no2_date_count$Var1)# date format

....

no26_date_count <- data.frame(table(cate_no26$date_id))
no26_date_count$Var1 <- ymd(no26_date_count$Var1)# date format

我想使用for语句重复以上代码。 我想知道如何使用正则表达式访问每个变量的数字。 创建变量列表时,它被识别为字符串,而不是数据帧名称,因此无法访问。

1 个答案:

答案 0 :(得分:0)

关键是使用ls和模式创建列表。然后使用get可以访问列表中的每个数据框。之后,您可以创建循环。

这是完整的代码:

library(lubridate)

# dummy data
cate_no1<-data.frame('date_id'=c(20180301,20180401,20180501, 20180501), 'var2'=1:4)
cate_no2<-data.frame('date_id'=c(20180601,20180701,20180801, 20180701), 'var2'=2:5)
cate_no26<-data.frame('date_id'=c(20180901,20181001,20181101, 20181001), 'var2'=3:6)

# list of variables in the environment using pattern cate_n
mylist1<-ls(pattern='cate_n')

# for loop
for (i in 1:length(mylist1))
{
  prefix<-gsub("cate_", "", mylist1[i], fixed = TRUE) # set prefix for output dataframe
  df<-get(mylist1[i]) # get input dataframe from the list
  df<-data.frame(table(df$date_id)) # get table of frequencies
  df$Var1<-ymd(as.character(df$Var1)) # transform to date
  assign(paste0(prefix, '_date_count'), df) # create output dataframes
  rm(df)
}