8

データフレーム df があるとします

df <- data.frame( a1 = 1:10, b1 = 2:11, c2 = 3:12 )

列をサブセット化したいのですが、パターンがあります

df1 <- subset( df, select= (pattern = "1") )

取得するため

> df1
   a1 b1
1   1  2
2   2  3
3   3  4
4   4  5
5   5  6
6   6  7
7   7  8
8   8  9
9   9 10
10 10 11

これは可能ですか?

4

3 に答える 3

10

経由でこれを行うことが可能です

subset(df, select = grepl("1", names(df)))

これを関数として自動化するには、 use[を使用してサブセット化を行うことができます。これを R の正規表現関数の 1 つと組み合わせると、必要なものがすべて揃います。

例として、上記のアイデアを実装したカスタム関数を次に示します。

Subset <- function(df, pattern) {
  ind <- grepl(pattern, names(df))
  df[, ind]
}

greplこれはエラーチェックなどではなく、どの列が一致するかを示す論理ベクトルを返すことに依存しているだけであり、それが列ごとにサブセットにpattern渡されることに注意してください。これを[適用すると、次のようになります。df

> Subset(df, pattern = "1")
   a1 b1
1   1  2
2   2  3
3   3  4
4   4  5
5   5  6
6   6  7
7   7  8
8   8  9
9   9 10
10 10 11
于 2013-10-17T03:30:14.783 に答える