我已经搜索过但无法找到答案,尽管这似乎是一个非常基本的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
我做错了什么?我非常感谢你能给予的任何帮助!
答案 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)