【问题标题】:Select columns in loop在循环中选择列
【发布时间】:2011-10-23 09:44:35
【问题描述】:

我有很宽的数据框,想创建很多短数据框?它看起来像这样:

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

感谢您的帮助!

【问题讨论】:

    标签: r select loops


    【解决方案1】:

    试试这个:

    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]])
    

    会做的。

    但是在变量名中嵌入索引通常是个坏主意。

    【讨论】:

    • 这很有帮助!谢谢!
    猜你喜欢
    • 2015-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-09
    • 2012-06-19
    • 2014-10-13
    相关资源
    最近更新 更多