0

次のオブジェクトがある場合

[1] 0 1 0 0 0 0 0 0 0

これを 1 つの列に配置して、データ フレーム内の他の列と整列させるにはどうすればよいですか。

0
1
0
0
0
0
0

私はうまくいくかもしれないと思っlistた...しかし、これはどの機能でうまくいくべきか

初歩的な質問で申し訳ありません...

4

2 に答える 2

2

data.frame「DF」と言う場合は、次のようにします。

DF <- data.frame(x=1:9, y=letters[1:9])

そして、あなたはvectorzを持っています:

z <- c(0, 1, 0, 0, 0, 0, 0, 0, 0)

を新しい列としてに追加する場合は、 の行数と の長さが同じである必要があることに注意してdata.frameくださいvectorvectordata.frame

dim(DF) # dimensions of data.frame
# [1] 9 2

length(z) # length of vector
# [1] 9

これで、次のように使用cbindして新しい列を取得できます。

cbind(DF, z)
#   x y z
# 1 1 a 0
# 2 2 b 1
# 3 3 c 0
# 4 4 d 0
# 5 5 e 0
# 6 6 f 0
# 7 7 g 0
# 8 8 h 0
# 9 9 i 0

vector長さが行の長さと等しくない がある場合data.frame

z <- c(0, 1, 0, 0, 0, 0, 0) # length is 7

cbind(DF, z)
# Error in data.frame(..., check.names = FALSE) : 
#   arguments imply differing number of rows: 9, 7

cbind'ing は、長さが等しくないためエラーになります。この場合、これを として保存する方法がいくつか考えられますlist

まず、次のようにdata.frameDF をそのまま保持listし、最初の要素を thedata.frameとして、2 番目の要素を avectorとして a を作成できます。

my_l <- list(d1 = DF, d2 = z)

# $d1
#   x y
# 1 1 a
# 2 2 b
# 3 3 c
# 4 4 d
# 5 5 e
# 6 6 f
# 7 7 g
# 8 8 h
# 9 9 i
# 
# $d2
# [1] 0 1 0 0 0 0 0

data.frameまたは、 yourを a に変換しlist( adata.frameは内部的に a )、すべての要素が次のようになっているlista を作成できます。listvectors

my_l <- c(as.list(DF), list(z=z))

# $x
# [1] 1 2 3 4 5 6 7 8 9
# 
# $y
# [1] a b c d e f g h i
# Levels: a b c d e f g h i
# 
# $z
# [1] 0 1 0 0 0 0 0

の列名を使用して、列を にas.list強制することに注意してください。次に、新しいz を作成し、演算子を使用します。data.framelistdata.framelistconcatenatec

これがあなたの理解を少し改善することを願っています。

于 2013-03-30T10:11:51.530 に答える