web-dev-qa-db-ja.com

データをcbindした後に列名を変更します

enter image description here

merger <- cbind(as.character(Date),weather1$High,weather1$Low,weather1$Avg..High,weather1$Avg.Low,sale$Scanned.Movement[a])

cbindデータの後、新しいDFは自動的に列名を持ちますV1V2......列の名前を変更したい

colnames(merger)[,1] <- "Date"

しかし、失敗しました。そして、merger$V1

Error in merger$V1 : $ operator is invalid for atomic vectors
30
janicebaratheon

また、cbind呼び出しで列に直接名前を付けることもできます。

cbind(date=c(0,1), high=c(2,3))

出力:

     date high
[1,]    0    2
[2,]    1    3
58
daknowles

試してください:

colnames(merger)[1] <- "Date"

以下に簡単な例を示します。

a <- 1:10
b <- cbind(a, a, a)
colnames(b)

# change the first one
colnames(b)[1] <- "abc"

# change all colnames
colnames(b) <- c("aa", "bb", "cc")
12
johannes

あなたの質問で次の例を挙げました:

colnames(merger)[,1]<-"Date"

問題はコンマです:colnames()は行列ではなくベクトルを返すので、解決策は次のとおりです。

colnames(merger)[1]<-"Date"
6
Marcel Hebing

ベクトルのみをcbind()に渡すと、データフレームではなく行列が作成されます。読む?data.frame

3
Roland

cbindがすべてベクトルである引数のセットを提供する場合、データフレームではなく、マトリックス、この場合はすべて文字のマトリックスを取得します。それらには異なる機能があります。引数の一部がデータフレームのままであれば、データフレームを取得できます。試してください:

merger <- cbind(Date =as.character(Date),
             weather1[ , c("High", "Low", "Avg..High", "Avg.Low")] , 
             ScnMov =sale$Scanned.Movement[a] )
2
42-

data.frameを生成し、これを1行で行う方法は、cbindを使用して列名属性を設定しながら、setNamesに渡されるすべての行列/データフレームをdata.frameに強制することです。

a = matrix(rnorm(10), ncol = 2)
b = matrix(runif(10), ncol = 2)

cbind(setNames(data.frame(a), c('n1', 'n2')), 
      setNames(data.frame(b), c('u1', 'u2')))

生成するもの:

          n1        n2         u1        u2
1 -0.2731750 0.5030773 0.01538194 0.3775269
2  0.5177542 0.6550924 0.04871646 0.4683186
3 -1.1419802 1.0896945 0.57212043 0.9317578
4  0.6965895 1.6973815 0.36124709 0.2882133
5  0.9062591 1.0625280 0.28034347 0.7517128

残念ながら、setColNamesに類似したsetNames関数はありません ただし、列名の後にマトリックスを返すデータフレームの場合、setNamesのコードを調整して生成することを止めるものは何もありません。

setColNames <- function (object = nm, nm) {
    colnames(object) <- nm
    object
}

この回答 を参照してください。magrittrパッケージにはこのための関数が含まれています。

2
Alex

ベクトルを追加する前に引用符で使用したい名前を追加するだけです

a_matrix <- cbind(b_matrix,'Name-Change'= c_vector)
0
Priyansh