5

計算してdifftime列を追加したデータフレームがあります。

    name   amount   1st_date   2nd_date  days_out
    JEAN  318.5 1971-02-16 1972-11-27  650 days
 GREGORY 1518.5       <NA>       <NA>   NA days
    JOHN  318.5       <NA>       <NA>   NA days
  EDWARD  318.5       <NA>       <NA>   NA days
  WALTER  518.5 1971-07-06 1975-03-14 1347 days
   BARRY 1518.5 1971-11-09 1972-02-09   92 days
   LARRY  518.5 1971-09-08 1972-02-09  154 days
   HARRY  318.5 1971-09-16 1972-02-09  146 days
   GARRY 1018.5 1971-10-26 1972-02-09  106 days

私はそれを分解して、days_outが0-60、61-90、91-120、121-180である小計を取りたいと思います。

どういうわけか、括弧表記を確実に書くことさえできません。私は期待します

members [members $ days_out <= 120、]は、バリーとギャリーだけを表示しますが、次のような行がたくさんあります。

NA.1095     <NA>     NA       <NA>       <NA>  NA days
NA.1096     <NA>     NA       <NA>       <NA>  NA days
NA.1097     <NA>     NA       <NA>       <NA>  NA days

それらは元のデータには存在しません。名前のない人はいない。私はここで何が間違っているのですか?

4

2 に答える 2

4

これは、<およびその他の関係演算子の標準的な動作ですNA。他の数値よりも小さい(または大きい、または等しい、または...)かどうかを評価するように求められると、またはではなく、が返されNAます。TRUEFALSE

これは、何が起こっているのかを明確にし、簡単な修正を示す必要がある例です。

x <- c(1, 2, NA, 4, 5)
x[x < 3]
# [1]  1  2 NA
x[x < 3 & !is.na(x)]
# [1] 1 2

'sでインデックス付けされたすべての行に、、などのrow.namesがある理由を確認するには、NA次のことを試してください。NA.1095NA.1096

data.frame(a=1:2, b=1:2)[rep(NA, 5),]
#       a  b
# NA   NA NA
# NA.1 NA NA
# NA.2 NA NA
# NA.3 NA NA
# NA.4 NA NA
于 2012-12-14T22:07:29.203 に答える
4

コンソールで作業している場合、subset関数にはその厄介な「機能」がありません。これは、実際に[は関係演算子以外の動作によるものです。

subset(members, days_out <= 120)

プログラミングをしている場合は、whichまたはJoshとの接続詞を& is.na(.)which舞台裏」で使用できます。

members[ which(members$days_out <= 120), ]
于 2012-12-14T22:52:19.723 に答える