私はindex
の出現を繰り返す行を選択しようとしており、金額データが変更された場合にのみ表示されます。インデックス列に指定された値が繰り返し出現する行を選択する方法は?
> df
index amount
1 a 1
2 b 2
3 b 3
4 c 1
5 c -1
上記の簡単なdfが与えられているとします。返されたdfに4行目と5行目しか持たせたくありません。
簡単なフィルタリング方法は?
私はindex
の出現を繰り返す行を選択しようとしており、金額データが変更された場合にのみ表示されます。インデックス列に指定された値が繰り返し出現する行を選択する方法は?
> df
index amount
1 a 1
2 b 2
3 b 3
4 c 1
5 c -1
上記の簡単なdfが与えられているとします。返されたdfに4行目と5行目しか持たせたくありません。
簡単なフィルタリング方法は?
1つのオプションはdata.table
です。 if
'data.frame'を 'data.table'(setDT(df)
)に変換し、unique
sign
の数値が1より大きい場合、Data.tableのサブセット(.SD
)
library(data.table)
setDT(df)[, if(uniqueN(sign(amount))>1) .SD , by = index]
# index amount
#1: c 1
#2: c -1
base R
オプションは、ちょうどdplyr
で別のオプションを追加することave
i1 <- with(df, as.logical(ave(sign(amount), index, FUN = function(x) length(unique(x))>1)))
df[i1,]
で次のようになります。
library(dplyr)
df %>%
group_by(index) %>%
filter(length(unique(sign(amount))) > 1)
#> Source: local data frame [2 x 2]
#> Groups: index [1]
#>
#> index amount
#> <chr> <int>
#> 1 c 1
#> 2 c -1
ありがとうございました。それは私のためにかなりうまく動作します –
@TomKフィードバックいただきありがとうございます。 [ここ](http://stackoverflow.com/help/someone-answers)にチェックを入れることもできます。 – akrun