44

ここに画像の説明を入力してください

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

データの後cbind、新しいDFには自動的V1に列名が付けられますV2。......列の名前を次のように変更します。

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

しかし失敗しました。そして、私が使うときmerger$V1

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

7 に答える 7

81

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

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

出力:

     date high
[1,]    0    2
[2,]    1    3
于 2014-04-01T22:37:48.627 に答える
15

試す:

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")
于 2012-06-19T18:23:31.427 に答える
6

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

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

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

colnames(merger)[1]<-"Date"
于 2012-08-11T21:36:12.780 に答える
4

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

于 2012-06-19T18:29:44.263 に答える
4

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

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。パッケージにはこのための関数が含まれています。

于 2017-03-01T03:51:40.910 に答える
3

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

merger <- cbind(Date =as.character(Date),
             weather1[ , c("High", "Low", "Avg..High", "Avg.Low")] , 
             ScnMov =sale$Scanned.Movement[a] )
于 2012-06-19T18:34:30.587 に答える
2

ベクトルを追加する前に、引用符で使用する名前を追加するだけで簡単です。

a_matrix <- cbind(b_matrix,'Name-Change'= c_vector)
于 2017-06-18T19:18:00.620 に答える