そして、新しい配列を初期化するとき、このフィールドのすべての値を実際の数値で初期化する必要がありますか?
2 に答える
新しいフィールドを追加する方法は、所有しているオブジェクトによって異なります。以下にオプションを示します。length()
追加しようとしている変数の数が追加先のオブジェクトの行数と等しくない場合は、最初に新しい列/変数を埋めてから、変数を新しく追加したオブジェクトの正しい要素に追加する必要がありますNA
。作成されたオブジェクト。たとえば、
df <- data.frame(var1 = 1:5, var2 = LETTERS[1:5])
c(1,3,4)
の 3 番目の変数の行 1、2、および 5 にベクトルを追加したい場合はdf
、次のように実行できます。
df$var3 <- NA ## note the single NA is recycled to the correct length
次に、サブセット化を使用して新しいデータを正しい要素に挿入します
df$var3[c(1,2,5)] <- c(1,3,4)
与える:
> df$var3[c(1,2,5)] <- c(1,3,4)
> df
var1 var2 var3
1 1 A 1
2 2 B 3
3 3 C NA
4 4 D NA
5 5 E 4
追加する変数の長さが正しい場合は、何も初期化する必要はありません。データ フレームまたはマトリックスのどちらを使用しているかに応じて、以下で説明するアプローチのいずれかを使用して、その場合に必要なものを実現します。
データフレームを想定
データフレームがある場合、いくつかの方法があります。たとえば、
df <- data.frame(var1 = 1:10, var2 = LETTERS[1:10])
我々はできる
> df$var3 <- letters[1:10]
> df
var1 var2 var3
1 1 A a
2 2 B b
3 3 C c
4 4 D d
5 5 E e
6 6 F f
7 7 G g
8 8 H h
9 9 I i
10 10 J j
私は好むtransform()
df <- transform(df, var3 = letters[1:10])
または関連するwithin()
df <- within(df, var3 <- letters[1:10]) ## note diff syntax
あなたもできる
df[, "var3"] <- letters[1:10]
また
df[, 3] <- letters[1:10]
後者はその名前の変数を生成せず"var3"
、代わりにデフォルト名を取得します。
列をデータ フレームにバインドするために使用することもできますcbind()
(行列にも使用できます)。最初の引数としてデータ フレームを渡すか、"data.frame"
メソッドを直接呼び出す必要があることに注意してください。そうしないと、結果としてデータ フレームが取得されません。
df <- cbind(df, var3 = letters[1:10])
df2 <- cbind.data.frame(var3 = letters[1:10], df)
## note `df2` will have `var3` as the first column here
行列を仮定する
マトリックスがある場合、オプションは基本的に を使用するように削減されますcbind()
。使用する
mat <- matrix(1:20, ncol = 2)
できるよ
mat <- cbind(mat, 1:10)
他のオプションは機能しません。
空のベクトルを既存の行列/データ フレームに追加しようとすると、そのベクトルは配列内の他の行/列と同じ長さでなければなりません。最善の方法は、データを入力するときに置き換えることができる NA または NULL 値のベクトルを追加することだと思います。たとえば、パッケージのiris
データを使用すると、次のようになります。datasets
iris.new <- data.frame(iris, add = rep(NA, nrow(iris))
次に、基本的な解析コマンドを使用してデータを入力します。
iris.new[13, "add"] <- 100
それが役立つことを願っています。