我試圖選擇具有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行。
什麼是簡單的過濾方式?
一個選項是data.table
。將'data.frame'轉換爲'data.table'(setDT(df)
),按'index'分組,if
'amount'的數量爲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
選項將與ave
i1 <- with(df, as.logical(ave(sign(amount), index, FUN = function(x) length(unique(x))>1)))
df[i1,]
我想補充另一種選擇與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
感謝您的快速回復。這對我很有用 –
@TomK感謝您的反饋。你也可以勾選[here](http://stackoverflow.com/help/someone-answers) – akrun