2

こんにちは私は1つのベクトルを大きなデータベースと比較した結果であるRのデータフレームを持っています(dbはこのように読み取られましたdb <- read.table("database.txt", header = F, row.names = 1, sep = ","))。

問題は、このコードcolnames(some_matrix_with_example_below) <- c("name1","name2")Rを使用して列に名前を付けようとすると、エラーが発生したことです。

Error in `colnames<-`(`*tmp*`, value = c("name1", "name2")) : 
  length of 'dimnames' [2] not equal to array extent

名前を変更するマトリックスの例

row.names   item
dbi1    1.0000000
dbi3    0.9431307
dbi4    0.9427034
dbi5    0.9259156
dbi6    0.9210256

row.namesが列のように扱われないことを正しく理解しているので、名前と値のオブジェクトを作成せず、さらにエクスポートするためにそれらをバインドしない簡単な方法はありますか?

4

1 に答える 1

2

使用する

df <- read.table(text="row.names   item
dbi1    1.0000000
dbi3    0.9431307
dbi4    0.9427034
dbi5    0.9259156
dbi6    0.9210256", header=TRUE)

ここにdfは 2 つの列があることに注意してください。

> df
  row.names      item
1      dbi1 1.0000000
2      dbi3 0.9431307
3      dbi4 0.9427034
4      dbi5 0.9259156
5      dbi6 0.9210256

これらの名前を変更します。

names(df) <- paste0("name", 1:2)

を与える

> df
  name1     name2
1  dbi1 1.0000000
2  dbi3 0.9431307
3  dbi4 0.9427034
4  dbi5 0.9259156
5  dbi6 0.9210256

このデータ フレームを書き出すときに、行名の書き込みを抑制します。

write.table(df, file = "my_data.txt", quote = FALSE, col.names = TRUE,
            row.names = FALSE, sep = ",")

次のファイルを取得します。

$ cat my_data.txt 
name1,name2
dbi1,1
dbi3,0.9431307
dbi4,0.9427034
dbi5,0.9259156
dbi6,0.9210256

丸めステップをファイルへのデータの書き込みから分離します。write.table()また、データ フレームを使用するためにマトリックスに変換する必要はありません。

df2 <- transform(df, name2 = round(name2, digits = 4))

与える

> df2
  name1  name2
1  dbi1 1.0000
2  dbi3 0.9431
3  dbi4 0.9427
4  dbi5 0.9259
5  dbi6 0.9210

次に、上記のように書きます。必要に応じて、2 つの手順を組み合わせることもできます。

write.table(transform(df, name2 = round(name2, digits = 4)),
            file = "my_data3.txt", quote = FALSE, col.names = TRUE,
            row.names = FALSE, sep = ",")
于 2012-06-13T19:19:15.980 に答える