我有非常宽的数据框,想创建许多短数据帧?它看起来像这样:
location = c("A","B","C","D","E","F","G","H")
V1a = c(1,5,3,2,1,2,5,6)
V2a = c(3,2,6,7,3,2,1,2)
V3a = c(1,0,5,2,2,0,2,5)
V1b = c(3,2,6,7,3,2,1,2)
V2b = c(1,5,3,2,1,2,5,6)
V3b = c(1,5,3,2,1,2,5,6)
x <- data.frame(location,V1a,V2a,V3a,V1b,V2b,V3b)
x
location V1a V2a V3a V1b V2b V3b
1 A 1 3 1 3 1 1
2 B 5 2 0 2 5 5
3 C 3 6 5 6 3 3
4 D 2 7 2 7 2 2
5 E 1 3 2 3 1 1
6 F 2 2 0 2 2 2
7 G 5 1 2 1 5 5
8 H 6 2 5 2 6 6
我想从循环(如果可能的话)创建3个数据帧作为此
x1 <- x[,c(1,2,5)]
x1
location V1a V1b
1 A 1 3
2 B 5 2
3 C 3 6
4 D 2 7
5 E 1 3
6 F 2 2
7 G 5 1
8 H 6 2
x2 <- x[,c(1,3,6)]
x2
location V2a V2b
1 A 3 1
2 B 2 5
3 C 6 3
4 D 7 2
5 E 3 1
6 F 2 2
7 G 1 5
8 H 2 6
x3 <- x[,c(1,4,7)]
x3
location V3a V3b
1 A 1 1
2 B 0 5
3 C 5 3
4 D 2 2
5 E 2 1
6 F 0 2
7 G 2 5
8 H 5 6
感谢您的帮助!
答案 0 :(得分:5)
试试这个:
idx <- list(c(1, 2, 5),
c(1, 3, 6),
c(1, 4, 7))
ret <- lapply(idx, function(i) x[, i])
ret
是一个包含3个元素的列表。您可以通过ret[[1]]
等访问每个元素。
如果你真的想要x1
等,那么,
for (i in 1:length(ret)) assign(paste("x", i, sep = ""), ret[[i]])
将完成这项工作。
但是将索引嵌入到变量名中通常是个坏主意。