我的數據是這樣的:找到相關的組
num group
0 433
0 433
0 433
0 211
0 211
0 211
1 309
1 309
1 309
0 424
0 947
1 309
0 433
我想檢查是否有特定的集團一直在NUM列值0或1,但我的數據幀有許多行(即組433在開始時,可以在df中的其他行中)。它如何索引它?
我的數據是這樣的:找到相關的組
num group
0 433
0 433
0 433
0 211
0 211
0 211
1 309
1 309
1 309
0 424
0 947
1 309
0 433
我想檢查是否有特定的集團一直在NUM列值0或1,但我的數據幀有許多行(即組433在開始時,可以在df中的其他行中)。它如何索引它?
這裏使用data.table來檢查'num'列中unique
的unique
元素在'group'分組後是否只有1的選項。將'data.frame'轉換爲'data.table'(setDT(df1)
),按'組'分組,if
length
,unique
'num'中的元素爲1,則我們得到data.table的子集(.SD
)
library(data.table)
setDT(df1)[, if(uniqueN(num) == 1) .SD, by = group]
注意:在OP提供的示例中,所有「組」都只有一個唯一元素,因此它將獲得完整的數據集。
如果我們需要的「基團」的id爲僅具有單個unique
元件
setDT(df1)[, if(uniqueN(num) == 1) group, by = group]$V1
#[1] 433 211 309 424 947
如果我們需要的「NUM」列與每當有僅單個unique
「「基團」沿「每個 '組' NUM
setDT(df1)[,if(uniqueN(num)==1) .(num = num[1L]) , by = group]
# group num
#1: 433 0
#2: 211 0
#3: 309 1
#4: 424 0
#5: 947 0
也許table
?
table(df)
group
num 211 309 424 433 947
0 3 0 1 4 1
1 0 4 0 0 0
更新
這裏有一些dplyr
選擇:
library(dplyr)
# To find the number of distinct values per group
df %>% group_by(group) %>% summarise(n_distinct(num))
# To find groups that have only one distinct value and their corresponding value
df %>% group_by(group) %>%
summarise(UniqueNum = ifelse(n_distinct(num) > 1, NA, unique(num))) %>%
na.omit()
# To find all distinct values per group
df %>% group_by(group) %>% summarise(list(unique(num))) %>% tidyr::unnest()
你可以看到每個組有多少不同的價值觀基礎R與tapply
with(dd, tapply(num, group, function(x) length(unique(x))))
無再indexin g需要。
那麼,類似於@ Mr.Flick的方法。
您可以使用aggregate
找出unique
值爲每個組
aggregate(num ~ group, df, unique)
# group num
#1 211 0
#2 309 1
#3 424 0
#4 433 0
#5 947 0
如果你想只有那些羣體只具有一個值,每次,你可以擴展到
a <- aggregate(num ~ group, df, function(x) length(unique(x)) == 1)
a[a$num,1]
#[1] 211 309 424 433 947
@akrun請停止此操作。我沒有降低你的答案。 –
我並沒有說你低估了它,我是在問你的意見,爲什麼它在你同時發佈時被降低了。 – akrun
@akrun我不知道爲什麼有人會低估你的答案,爲什麼我的答案被低估? –
然而簡單化,這是一個代碼寫入請求 –
您是否嘗試過'表(DF1 $組,DF2 $ NUM)'? – angelous