1

必要なエントリ文字列のチャンクのみを示すことで、データフレームを抽出/サブセット化することは可能ですか?

フィルター基準は因子ベクトルに格納されます。ただし、表示されるのは最初の 3 桁だけです。これにより、それらで始まるデータフレームのすべてのエントリをサブセット化することが決定されます。

例:

 # Input dataframe
 data <- read.table(header=T, text='
             ID sex size
        0120010   M    7
        0120020   F    6
        0121031   F    9
        0130010   M   11
        0130020   M   11
        0130030   F   14
        0130040   M   11
        0150030   F   11
        0150110   F   12
        0180030   F    9
        1150110   F   12
        9180030   F    9
        'colClasses =c("character", "factor", "integer"))

 # Input vector/factor with the ID chunk, containing only the fist three digits
 # of the targeted entries in data$ID
 IDfilter <- c("012", "015", "115")

 # My try/idea which sadly is not working - PLEASE HELP HERE
 subset <- data[ID %in% paste(IDfilter, "?.", sep=""),]

 # Expected subset
 > subset
           ID sex size
 1    0120010   M    7
 2    0120020   F    6
 3    0121031   F    9
 4    0150030   F   11
 5    0150110   F   12
 6    1150110   F   12

ありがとうございました!:)

4

2 に答える 2

2

このようなもの?

data <- read.table(header=T, text='
             ID sex size
         0120010   M    7
        0120020   F    6
        0121031   F    9
        0130010   M   11
        0130020   M   11
        0130030   F   14
        0130040   M   11
        0150030   F   11
        0150110   F   12
        0180030   F    9
        1150110   F   12
        9180030   F    9
        ', colClasses =c("character", "factor", "integer"))

 IDfilter <- c("012", "015", "115") # filter must be character vector



   data[substr(data[,"ID"], 1,3) %in% IDfilter, ]
#        ID sex size
#1  0120010   M    7
#2  0120020   F    6
#3  0121031   F    9
#8  0150030   F   11
#9  0150110   F   12
#11 1150110   F   12

に注意してくださいcolClases。この場合、ID最初の数値を 0 にできるようにするために文字であると想定され0120010ます (数値または整数の場合)。この数値は次のようになります。120010

別の選択肢は

data[substr(data[,"ID"], 1,nchar(IDfilter)[1]) %in% IDfilter, ]

ここで、 の 3 番目の引数はsubstrの最初の要素の文字数に自動的に更新されます。ここでは、 の各数値が同じ文字数であるとIDfileter仮定しています。IDfilter

于 2013-08-29T23:32:02.557 に答える