3

私はこのデータフレームを持っています:

    Name    Country Gender  Age
1   John      GB      M     25
2   Mark      US      M     35
3   Jane      0       0      0
4   Jane      US      F     30
5   Jane      US      F      0
6   Kate      GB      F     18

ご覧のとおり、値 "Jane" が 3 回表示されます。私がやりたいことは、変数「名前」に基づいてリストを重複排除することですが、残りの列は私にとって重要であるため、最も情報が多い行を保持したいと考えています。たとえば、上記のファイルを Excel で重複排除すると、「Jane」の最初の値が保持され、他のすべての値が削除されます。しかし、「ジェーン」の最初の値 (行番号 3) には、他の列の情報がありません。

つまり、「名前」でリストを重複排除したいのですが、「年齢」列に「0」以外の値を持つ行を保持する基準を追加します。このようにして得られる結果は次のようになります。

    Name    Country Gender  Age
1   John       GB     M     25
2   Mark       US     M     35
3   Jane       US     F     30
4   Kate       GB     F     18

私はこれを試しました

file3 <- file1[!duplicated(file1$Name),]

しかし、Excel のように、他の列に使用可能な情報がない "Jane" の値を保持します。

列「Age」に基づいて行を ZA 順に並べ替えて、「0」を持つものが一番下になり、リストの重複除去時に削除されるようにするにはどうすればよいですか?

乾杯

デビッド

4

2 に答える 2

3

このトリックを試してください

ind <- with(DF, 
        Country !=0 &
        Gender %in% c('F', 'M') &
        Age !=0)

DF[ind, ]
  Name Country Gender Age
1 John      GB      M  25
2 Mark      US      M  35
4 Jane      US      F  30
6 Kate      GB      F  18

これまでのところ、それはうまく機能し、希望の出力を生成します

編集

 library(doBy)
    orderBy(~ -Age+Name, DF) # Sort decreasingly by Age and Name

  Name Country Gender Age
2 Mark      US      M  35
4 Jane      US      F  30
1 John      GB      M  25
6 Kate      GB      F  18
3 Jane       0      0   0
5 Jane      US      F   0

または、単に基本関数を使用します。

DF[order(DF$Age, DF$Name, decreasing = TRUE), ]
  Name Country Gender Age
2 Mark      US      M  35
4 Jane      US      F  30
1 John      GB      M  25
6 Kate      GB      F  18
3 Jane       0      0   0
5 Jane      US      F   0

これで、条件に合った正しい行にインデックスを付けることで選択できるようになりました。最初の部分は、これら2つの最後の部分よりも優れていると思います。

于 2012-11-29T10:33:01.190 に答える
1

複製されたすべての行の列の値がゼロの場合、次のAgeように機能しsubsetます。

# the data
file1 <- read.table(text="Name    Country Gender  Age
1   John      GB      M     25
2   Mark      US      M     35
3   Jane      0       0      0
4   Jane      US      F     30
5   Jane      US      F      0
6   Kate      GB      F     18", header = TRUE, stringsAsFactors = FALSE)

# create a subset of the data
subset(file1, Age > 0)

#   Name Country Gender Age
# 1 John      GB      M  25
# 2 Mark      US      M  35
# 4 Jane      US      F  30
# 6 Kate      GB      F  18
于 2012-11-29T10:50:58.677 に答える