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