使用R中的for循环添加多个列,使用行条目添加名称

时间:2015-04-09 19:03:52

标签: r for-loop dataframe

我已经搜索过但无法找到答案,尽管这似乎是一个非常基本的R问题。

我正在尝试使用for循环向数据框添加多个列。我还希望每个列都以它对应的行条目命名。

以下是一个例子:

    > test <- data.frame(cbind(x=1, y=1:10))
    > test
    x  y
    1  1
    1  2
    1  3
    1  4
    1  5
    1  6
    1  7
    1  8
    1  9
    1 10

然后我尝试了这个:

    y <- test$y
    for (i in y) { test$i <- rep(c(test$y [i]), times=length(test$y)) }

给了我这个:

    > test
    x  y  i
    1  1 10
    1  2 10
    1  3 10
    1  4 10
    1  5 10
    1  6 10
    1  7 10
    1  8 10
    1  9 10
    1 10 10

然而,我想要的是:

    > test
    x  y  1  2  3  4  5  6  7  8  9  10
    1  1  1  2  3  4  5  6  7  8  9  10
    1  2  1  2  3  4  5  6  7  8  9  10
    1  3  1  2  3  4  5  6  7  8  9  10
    1  4  1  2  3  4  5  6  7  8  9  10
    1  5  1  2  3  4  5  6  7  8  9  10
    1  6  1  2  3  4  5  6  7  8  9  10
    1  7  1  2  3  4  5  6  7  8  9  10
    1  8  1  2  3  4  5  6  7  8  9  10
    1  9  1  2  3  4  5  6  7  8  9  10
    1 10  1  2  3  4  5  6  7  8  9  10

我做错了什么?我非常感谢你能给予的任何帮助!

1 个答案:

答案 0 :(得分:1)

尝试

v1 <- seq_len(nrow(test))
#or
#v1 <- test$y 
cbind(test,setNames(data.frame(as.list(v1)), v1))
#   x  y 1 2 3 4 5 6 7 8 9 10
#1  1  1 1 2 3 4 5 6 7 8 9 10
#2  1  2 1 2 3 4 5 6 7 8 9 10
#3  1  3 1 2 3 4 5 6 7 8 9 10
#4  1  4 1 2 3 4 5 6 7 8 9 10
#5  1  5 1 2 3 4 5 6 7 8 9 10
#6  1  6 1 2 3 4 5 6 7 8 9 10
#7  1  7 1 2 3 4 5 6 7 8 9 10
#8  1  8 1 2 3 4 5 6 7 8 9 10
#9  1  9 1 2 3 4 5 6 7 8 9 10
#10 1 10 1 2 3 4 5 6 7 8 9 10

或者

test[paste(v1)] <- as.list(v1)