0

行ごとにデータフレームに割り当てるにはどうすればよいですか?これらは私が試したことです:

df <- data.frame(id=1:5)
df[c('x1','x2')] <- c(1,2)
df[c('x1','x2')] <- matrix(c(1,2),nrow=1)
df[c('x1','x2')] <- matrix(c(1,2),nrow=1,byrow=T)

これを実行したい理由は、各行の多変量正規分布からポイントを生成しているためです。

ありがとう!

編集:出力を次のようにしたいと思います:

id x1 x2
1  1  1  2
2  2  1  2
3  3  1  2
4  4  1  2
5  5  1  2

しかし、私が得るものは次のとおりです。

  id x1 x2
1  1  1  2
2  2  2  1
3  3  1  2
4  4  2  1
5  5  1  2
4

3 に答える 3

1

関数はベクトルを返しますc(1,2)。にあるとしましょうx

df <- data.frame(id=1:5)
x <- 1:2 # function output.

df <- cbind(df, t(replicate(nrow(df), x)))
names(df) <- c("id", "x1", "x2")

> df

#   id x1 x2
# 1  1  1  2
# 2  2  1  2
# 3  3  1  2
# 4  4  1  2
# 5  5  1  2

関数から返される1*2次元ベクトルの束がある場合は、最初に5 * 2の行列を作成してから、を作成する必要がありますcbind

これはあなたが期待していることですか?

于 2013-02-21T21:07:46.373 に答える
0

あなたはほとんどそこにいます!式の後にコンマを入れてください[ ]

 df[c('x1','x2'),  ]  <-  <what you would like to assign>
于 2013-02-21T20:39:20.853 に答える
0

アルンの答えが機能する理由と代替案は次のとおりです。

Rデータフレームは各列で異なる変数タイプを持つ可能性があるため、データフレーム行にベクトルを割り当てることは避けてください。列に数値、文字列、および因子が含まれていると想像してください。その場合、そのデータフレームの行はベクトルではなくベクトルはすべて1つのタイプ、つまりすべての数値またはすべての因子でなければならないため)、リストではありません。Rがリストを期待する場所にベクトルを割り当てようとすると、悪いことが起こる可能性があります。

ただし、リストをデータフレーム行に割り当てることができます。例えば:

> df <- data.frame(id=1:5, x1=1, x2=2)
> df
  id x1 x2
1  1  1  2
2  2  1  2
3  3  1  2
4  4  1  2
5  5  1  2
> row2 <- list(x1=3, x2=4)
> df[2, c('x1','x2')] <- row2
> df
  id x1 x2
1  1  1  2
2  2  3  4
3  3  1  2
4  4  1  2
5  5  1  2

または、(例のように)すべてが数値であることがわかっている場合は、データフレームの代わりに行列を作成します。次に、ベクトルを行列行に割り当てることができます。問題ありません。

> mat <- matrix(c(1:5, rep(1,5), rep(2,5)), 5, 3)
> colnames(mat) <- c("id","x1","x2")
> mat
     id x1 x2
[1,]  1  1  2
[2,]  2  1  2
[3,]  3  1  2
[4,]  4  1  2
[5,]  5  1  2
> row2 <- c(3,4)
> mat[2, c("x1","x2")] <- row2
> mat
     id x1 x2
[1,]  1  1  2
[2,]  2  3  4
[3,]  3  1  2
[4,]  4  1  2
[5,]  5  1  2
于 2013-03-29T19:26:01.253 に答える