特定の名前を持つ列を除いて、データフレームのすべての列を選択する方法はありますか?.
インデックスの代わりに列名を使用することを除いて、df[, -1]
に類似していますか?
これは、ベクトルサブセットを使用して行うことができます。まず、ダミーデータセットを作成します。
R> dd = data.frame(A = 1:3, B = 1:3, C=1:3, D=1:3)
次に、!
演算子を使用して、選択を逆にします。
R> dd[ ,!(colnames(dd) == "A")]
B C D
1 1 1 1
2 2 2 2
3 3 3 3
または、次のようにすることもできます。
少し短いバージョン(@Tomas提供):
dd[ , names(dd) != "A"]
複数の列に対処するには(@Tylerの厚意による)
dd[ ,!(colnames(dd) %in% c("A", "B"))]
subset
関数は、ヘルプページの例から、このタイプの構文を既に許可しています。
subset(airquality, Day == 1, select = -Temp)
which()
関数を使用して、削除する列を識別できます。
_dd <- data.frame(A = 1:5, B = 1:5, C=1:5)
dd[, -which(names(dd) == "A")]
_
または積極的に
_dd[, which(names(dd) != "A")]
_
ただし、「A」という名前の列がない場合は、0列とnrow(dd)
行のデータフレームが表示されます。したがって、「A」という名前の列の存在を確認することをお勧めします。
_if(any(names(dd) == "A")) {
dd[, which(names(dd) != "A")]
}
_
複数の列の選択を解除するには、dplyrパッケージを使用できます。例として:
dd = data.frame(A = 1:3, B = 1:3, C=1:3, D=1:3)
library(dplyr)
newdd <- select(dd, -A,-C)
これは、@ csgillespieが示唆した以外の方法です。
AとCを削除
base
ソリューションdf <- data.frame(A = 1:3, B = 1:3, C=1:3, D=1:3)
df[,c("A","C")]<-NULL
data.table
解決dt <- data.table(A = 1:3, B = 1:3, C=1:3, D=1:3)
# A B C D
# 1: 1 1 1 1
# 2: 2 2 2 2
# 3: 3 3 3 3
dt[,c("A","C"):=NULL]
# B D
#1: 1 1
#2: 2 2
#3: 3 3