1

Rに重複する列名を持つデータフレームがあります。サブセットを使用してこのデータフレームから特定の列を選択すると、重複する名前が変更されて区別されます。関数data.frame()を使用してデータフレームを作成している場合、引数check.names = FALSEを使用してこれを防ぐことができますが、サブセット(または名前列を選択する他の方法)を使用してこれを行う方法はありますか? 。

たとえば、データフレームがあるとします

data <- data.frame('sample' = 50, 'x_mean' = 1.5, 'Lower CI' = 1.0, 'Upper CI' = 2.0, 'sample' = 50, 'y_mean' = 0.6, 'Lower CI' = 0.3, 'Upper CI' = 0.9, check.names = FALSE)

selectVec <- c(TRUE, TRUE, TRUE, TRUE, FALSE, TRUE, TRUE, TRUE)

コードを使用する

subset(data, select = selectVec)

重複する信頼区間の名前を「LowerCI.1」と「UpperCI.1」に変更しますが、これらは「LowerCI」と「UpperCI」のままにしておきます。誰かがこれを行う方法を知っていますか?

前もって感謝します。

4

2 に答える 2

3

で同じ動作が得られるようです[。私が考えることができる唯一の方法は、後で名前を再割り当てすることです。

subdata <- data[, selectVec, drop = FALSE]
names(subdata) <- names(data)[selectVec]

ただし、列名を複製することは、データを保持するための非常に不自然で、複雑で(明らかに)危険な形式であることに注意してください。そもそもファイルまたはdata.frameの列が重複している理由を理解し、そこで修正しようと思います。

于 2012-11-16T11:31:50.587 に答える
1

このメソッドは、名前の再割り当てが必要になるパススルーを回避[.data.frameします。データフレームはリストであり、論理インデックスは、データフレームの列をアドレス指定する場合と同じように機能します。

    data.frame(as.list(data)[ selectVec ], check.names=FALSE )
#  sample x_mean Lower CI Upper CI y_mean Lower CI Upper CI
#1     50    1.5        1        2    0.6      0.3      0.9
于 2012-11-16T22:43:46.760 に答える