15

ループで生成された名前で既存のデータフレームにデータを割り当てようとしています。基本的な例は次のとおりです。

A = data.frame(a = c(1,2,3), b=c(3,6,2))

for (i in 1:2){
    name = paste("Name",i, sep="")
    assign(name, c(6,3,2))
}

次に、name1 と name2 を data.frame A に追加し、割り当てられた名前を維持する方法を理解する必要があります。簡単な答えがあると確信していますが、今はわかりません。

最後に私は終わりたいと思います

A
#a b name1 name2
#1 3 6      6
#2 6 3      3
#3 2 2      2

しかし、これは自動化された方法で行う必要があります。

たとえば、 for ループを次のように適応させることができれば

for (i in 1:2){
    name = paste("Name",i, sep="")
    assign(name, c(6,3,2)
    A= cbind(A, get(paste(name,i,sep="")))  # works but doesn't maintain the column name as name1 or name2 etc
}

ただし、これは列名を維持しません

4

3 に答える 3

22

他の答えは良いですが、あなたが持っているようなループを使用することに設定されている場合、これは機能します:

A <- data.frame(a = c(1,2,3), b = c(3,6,2))

for (i in 1:2){
    A[paste("Name", i, sep="")] <- c(6,3,2)
}

を与える

> A
  a b Name1 Name2
1 1 3     6     6
2 2 6     3     3
3 3 2     2     2

または、次のpaste("Name", i, sep="")ように置き換えることもできますpaste0("Name", i)

于 2012-05-17T16:32:40.477 に答える
3

多分あなたはこれが欲しい:

R> A <- data.frame(a=c(1,2,3), b=c(3,6,2))
R> colnames(A) <- paste("Names", 1:ncol(A), sep="")
R> A
  Names1 Names2
1      1      3
2      2      6
3      3      2
R> 

しかし、タイラーがコメントで言ったように、あなたが何を求めているのかは完全には明らかではありません.

于 2012-05-16T18:12:24.133 に答える
3

あなたが達成しようとしていることはまだ完全にはわかりません:

A = data.frame(a = c(1,2,3), b=c(3,6,2))
B <- data.frame(A, c(6, 3, 2), c(6, 3, 2))
names(B)[3:4] <- paste0("name", 1:2)
B

どちらが得られますか:

  a b name1 name2
1 1 3     6     6
2 2 6     3     3
3 3 2     2     2
于 2012-05-16T18:21:32.887 に答える