我正在尝试选择重复出现index
的行,并且仅在数量数据更改符号时才会选择。
> df
index amount
1 a 1
2 b 2
3 b 3
4 c 1
5 c -1
鉴于上面简单的df。我希望返回的df只有第4行和第5行。
什么是简单的过滤方式?
答案 0 :(得分:1)
一个选项是 echo $form->field($model, 'user_id[]', [
])->widget(Select2::classname(), [
'data' => $user_data,
'value' => [1, 2], // Initial values, can also check with these value as string["1","2"],
.
.
。转换' data.frame'到' data.table' (data.table
),按'索引'分组,setDT(df)
&{39}的数量为if
unique
的数量'大于1,然后获取Data.table的子集(sign
)
.SD
library(data.table)
setDT(df)[, if(uniqueN(sign(amount))>1) .SD , by = index]
# index amount
#1: c 1
#2: c -1
选项将与base R
ave
答案 1 :(得分:1)
只需添加dplyr
的另一个选项:
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