【发布时间】:2017-08-22 13:04:25
【问题描述】:
我是 R 新手。我有一个下面的数据框,我需要从中选择特定的列。
数据框如下所示:
df<-data.frame(city=as.character("Boston","Boston","Boston","Boston","Boston","Boston","Boston","Boston","Boston","Boston"),
a.Boston=c(rep(8,3),rep(6,4),9,5,7),
a.Hartford=c(rep(6,3),rep(2,4),1,5,0),
a.Denver=c(rep(8,3),rep(9,4),3,8,9),
b.Boston_0=c(rep(8,3),rep(9,4),3,8,9),
b.Boston_1=c(rep(8,3),rep(9,4),3,8,9),
b.Boston_2=c(rep(8,3),rep(9,4),3,8,9),
b.Boston_3=c(rep(8,3),rep(9,4),3,8,9),
b.Boston_4=c(rep(8,3),rep(9,4),3,8,9),
b.Boston_5=c(rep(8,3),rep(9,4),3,8,9),
b.Boston_6=c(rep(8,3),rep(9,4),3,8,9),
b.Boston_7=c(rep(8,3),rep(9,4),3,8,9),
b.Boston_8=c(rep(8,3),rep(9,4),3,8,9),
b.Boston_9=c(rep(8,3),rep(9,4),3,8,9),
b.Boston_10=c(rep(8,3),rep(9,4),3,8,9),
b.Boston_11=c(rep(8,3),rep(9,4),3,8,9),
b.Boston_12=c(rep(8,3),rep(9,4),3,8,9),
b.Denver_0=c(rep(6,3),rep(2,4),1,5,0),
b.Denver_1=c(rep(6,3),rep(2,4),1,5,0),
b.Denver_2=c(rep(6,3),rep(2,4),1,5,0),
b.Denver_3=c(rep(6,3),rep(2,4),1,5,0),
b.Denver_4=c(rep(6,3),rep(2,4),1,5,0),
b.Denver_5=c(rep(6,3),rep(2,4),1,5,0),
b.Denver_6=c(rep(6,3),rep(2,4),1,5,0),
b.Denver_7=c(rep(6,3),rep(2,4),1,5,0),
b.Denver_8=c(rep(6,3),rep(2,4),1,5,0),
b.Denver_9=c(rep(6,3),rep(2,4),1,5,0),
b.Denver_10=c(rep(6,3),rep(2,4),1,5,0),
b.Denver_11=c(rep(6,3),rep(2,4),1,5,0),
b.Denver_12=c(rep(6,3),rep(2,4),1,5,0))
我想根据列的选择创建数据框 df1 到 df12。例如 df2 不应该包含具有后缀“_1”的列 他们的名字,但包含其余的列。对于 df9,不应包含具有“_1”、“_2”、... 到“_8”的列 例如 b.Boston_1,b.Denver_1,b.Boston_2,b.Denver_2.....b.Boston_8,b.Denver_8 但包含诸如 b.Boston_10,b.Denver_10,b.Boston_11,b.Denver_11。 df12 将仅包含诸如 a.Boston、a.Hartford、a.Denver 之类的列。 我想从 df 中删除“城市”列。
我写了以下代码:
i1 <- 0:12
for(i in seq_along(i1)) {
assign(paste0("df", i),
value = df[, setdiff(names(df),
c("city",
grep(paste("_", 0:i1[i],collapse="|", sep=""),
colnames(df), value = TRUE)))])
}
下面我得到了结果:
*df2*
a.Boston a.Hartford a.Denver b.Boston_2 b.Boston_3 b.Boston_4 b.Boston_5 b.Boston_6 b.Boston_7 b.Boston_8
1 8 6 8 8 8 8 8 8 8 8
2 8 6 8 8 8 8 8 8 8 8
b.Boston_9 b.Denver_2 b.Denver_3 b.Denver_4 b.Denver_5 b.Denver_6 b.Denver_7 b.Denver_8 b.Denver_9
1 8 6 6 6 6 6 6 6 6
2 8 6 6 6 6 6 6 6 6
df9:
a.Boston a.Hartford a.Denver b.Boston_9 b.Denver_9
1 8 6 8 8 6
2 8 6 8 8 6
问题是,对于 df2 和 df9,创建的数据框不包含从 b.Denver_10 到 b.Denver_12 的列 和 b.Boston_10 到 b.Boston_12。从 df1 到 df11 的数据帧都不包含后缀为 _10,_11,_12 的列,但它应该存在。
所需的o/p:
df9:
a.Boston a.Hartford a.Denver b.Boston_9 b.Boston_10 b.Boston_11 b.Boston_12 b.Denver_9 b.Denver_10
1 8 6 8 8 8 8 8 6 6
2 8 6 8 8 8 8 8 6 6
b.Denver_11 b.Denver_12
1 6 6
2 6 6
df10:
a.Boston a.Hartford a.Denver b.Boston_10 b.Boston_11 b.Boston_12 b.Denver_10 b.Denver_11 b.Denver_12
1 8 6 8 8 8 8 6 6 6
2 8 6 8 8 8 8 6 6 6
这种类型的o/p,我要从df1到df12。
谁能帮我解决这个问题?
提前致谢!!
【问题讨论】:
-
@loki,两个问题都不一样。谢谢。