2016-11-04 3 views

答えて

1

1つのオプションはdata.tableです。 if 'data.frame'を 'data.table'(setDT(df))に変換し、uniquesignの数値が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,] 
+1

ありがとうございました。それは私のためにかなりうまく動作します –

+0

@TomKフィードバックいただきありがとうございます。 [ここ](http://stackoverflow.com/help/someone-answers)にチェックを入れることもできます。 – akrun

1

で次のようになります。

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 
関連する問題