80

データフレーム「foo」が与えられた場合、「foo」からそれらの行のみを選択するにはどうすればよいfoo$location = "there"ですか。

foo = data.frame(location = c("here", "there", "here", "there", "where"), x = 1:5, y = 6:10)
foo
#   location x  y
# 1     here 1  6
# 2    there 2  7
# 3     here 3  8
# 4    there 4  9
# 5    where 5 10

望ましい結果、「バー」:

#   location x y
# 2    there 2 7
# 4    there 4 9
4

2 に答える 2

135

これが2つの主なアプローチです。私は読みやすさのためにこれを好みます:

bar <- subset(foo, location == "there")

&とを使用して多くの条件をつなぎ合わせて、|複雑なサブセットを作成できることに注意してください。

2つ目は、インデックス作成のアプローチです。Rの行には、数値スライスまたはブールスライスのいずれかでインデックスを付けることができます。の行と同じ長さのfoo$location == "there"ベクトルTと値を返します。これを行うと、条件がtrueを返す行のみを返すことができます。Ffoo

foo[foo$location == "there", ]
于 2010-08-10T02:28:39.910 に答える
4

上記の答えを拡張するために、列名を指定するのではなく、列にインデックスを付けることもできます。これは、実行していることによっては便利です。あなたの場所が最初のフィールドであるとすると、次のようになります。

    bar <- foo[foo[ ,1] == "there", ]

これは、特定の列をループするなど、列の値に対して操作を実行できるため便利です(また、行番号にインデックスを付けることでも同じことができます)。

これは、列の範囲を指定できるため、複数の列に対して何らかの操作を実行する必要がある場合にも役立ちます。

    foo[foo[ ,c(1:N)], ]

または、予想どおり、特定の列。

    foo[foo[ ,c(1,5,9)], ]
于 2018-10-01T04:50:19.960 に答える