我有csv文件列表,看起来像我在下面创建的数据框:
a<-data.frame(A=c("Boston","Boston","Boston","Boston","Boston"),pred_1=c(4,3,32,2,3), pred_2=c(5,3,2,6,22),pred_3=c(3,2,7,1,23),pred_4=c(8,9,2,6,21),pred_5=c(4,3,32,2,3), pred_6=c(5,3,2,6,22),pred_7=c(3,2,7,1,23),pred_8=c(8,9,2,6,21),
pred_9=c(4,3,32,2,3), pred_10=c(5,3,2,6,22),pred_11=c(3,2,7,1,23),pred_12=c(8,9,2,6,21))
b<-data.frame(A=c("Hartford","Hartford","Hartford","Hartford","Hartford"),pred_1=c(3,6,6,2,5), pred_2=c(2,7,8,4,23),pred_3=c(1,4,7,3,22),pred_4=c(9,2,1,3,25),pred_5=c(3,6,6,2,5), pred_6=c(2,7,8,4,23),pred_7=c(1,4,7,3,22),pred_8=c(9,2,1,3,25),pred_9=c(3,6,6,2,5),
pred_10=c(2,7,8,4,23),pred_11=c(1,4,7,3,22),pred_12=c(9,2,1,3,25))
df_list是数据框列表。
df_list<-list(a,b)
我需要在几天内创建数据帧,例如day1,day2,day3,day4等等。我的要求是 例如,day9数据框不应包含从pred_1到pred_8的列,但包含从pred_9到pred_12的列, 同样,对于days11,数据框应包含从pred_11到pred_12的列,但不应包含从pred_1到pred_10的列。 我在下面编写了代码,用于创建不能按要求工作的单个数据帧。
m <- list.files(pattern=".csv",ignore.case=TRUE, all.files = TRUE) # m stores all the csv files
for(iter in 1:length(m)){
print(m[iter])
my_csv=read.csv(m[iter])
i1 <- 1:12
i<-1:12
for(i in seq_along(i1)) {
print(i)
assign(paste0("days", i),
value = my_csv[, setdiff(names(my_csv),
c("A",
grep(paste("_", 1:i1[i],collapse="|", sep=""),
colnames(my_csv), value = TRUE)))])
}
}
答案 0 :(得分:0)
您可以使用以下语法 1
lapply(mylist,`[`,-2)
从数据框列表中删除第二列。
每次我将for
圈分配给mylist
时,我会在day1 <- df_list #day1 has all of the columns
mylist <- df_list #make a new list to avoid from altering original list
for (i in 2:12) {
x <- paste0("day",i)
assign(x,lapply(mylist,`[`,-2))
mylist <-lapply(mylist,`[`,-2)
}
循环播放,以便下一步删除下一列。
index.styl
答案 1 :(得分:0)
我首先从a
和b
组建了一个数据框,然后使用以下循环生成所需的输出。
> df <- rbind(a,b)
> df
A pred_1 pred_2 pred_3 pred_4 pred_5 pred_6 pred_7 pred_8 pred_9 pred_10 pred_11 pred_12
1 Boston 4 5 3 8 4 5 3 8 4 5 3 8
2 Boston 3 3 2 9 3 3 2 9 3 3 2 9
3 Boston 32 2 7 2 32 2 7 2 32 2 7 2
4 Boston 2 6 1 6 2 6 1 6 2 6 1 6
5 Boston 3 22 23 21 3 22 23 21 3 22 23 21
6 Hartford 3 2 1 9 3 2 1 9 3 2 1 9
7 Hartford 6 7 4 2 6 7 4 2 6 7 4 2
8 Hartford 6 8 7 1 6 8 7 1 6 8 7 1
9 Hartford 2 4 3 3 2 4 3 3 2 4 3 3
10 Hartford 5 23 22 25 5 23 22 25 5 23 22 25
> for(i in 2:ncol(df)) {
+
+ x <- paste0("Day", i-1)
+ assign(x, cbind(df[1], df[(i):(ncol(df))]))
+
+ }
> Day4
A pred_4 pred_5 pred_6 pred_7 pred_8 pred_9 pred_10 pred_11 pred_12
1 Boston 8 4 5 3 8 4 5 3 8
2 Boston 9 3 3 2 9 3 3 2 9
3 Boston 2 32 2 7 2 32 2 7 2
4 Boston 6 2 6 1 6 2 6 1 6
5 Boston 21 3 22 23 21 3 22 23 21
6 Hartford 9 3 2 1 9 3 2 1 9
7 Hartford 2 6 7 4 2 6 7 4 2
8 Hartford 1 6 8 7 1 6 8 7 1
9 Hartford 3 2 4 3 3 2 4 3 3
10 Hartford 25 5 23 22 25 5 23 22 25