[英]Select the second observation per group in R
我覺得這應該是直截了當的,但我無法弄清楚。 我想從數據框中按組選擇第二個觀察。
例如:
Row Number Email
1 xxxx
2 xxxx
3 xxxx
4 xxxx
5 xxxx
6 yyyy
7 yyyy
8 zzzz
9 zzzz
10 zzzz
11 zzzz
12 zzzz
而且我要:
Row Number Email
2 xxxx
7 yyyy
9 zzzz
似乎data.table解決方案和聚合解決方案正在跳過他們應該捕獲的電子郵件組。 以下是它應捕獲的前六秒行:
Row Number emails expected output actual output
1 aaaa
2 aaaa aaaa aaaa
3 aaaa
4 aaaa
5 aaaa
6 aaaa
7 aaaa
8 bbbb
9 bbbb bbbb bbbb
10 cccc
11 cccc cccc cccc
12 cccc
13 cccc
14 cccc
15 cccc
16 cccc
17 dddd NA
18 eeee
19 eeee eeee
20 eeee
21 ffff
22 ffff ffff ffff
電子郵件'eeee'在數據集中有一行,所以我希望這一行有NA行。 電子郵件'dddd'在原始數據集中有三行,所以我希望這封電子郵件的第二行,但它不存在。
嘗試這個。 不需要包裹:
subset(DF, ave(RowNumber, Email, FUN = seq_along) == 2)
要么
DF[ ave(DF$RowNumber, DF$Email, FUN = seq_along) == 2, ]
使用下面注釋下顯示的數據中的任何一個產生三行:
RowNumber Email
2 2 xxxx
7 7 yyyy
9 9 zzzz
示例數據沒有單個行組,問題沒有指定如何處理這些組,但這些答案不會為這些組生成行。 我想你會發現一些答案會給出相同的結果,而其他答案會將RowNumber
字段設置為NA
。
注意:
我們將它用於輸入數據DF
:
Lines <- "RowNumber Email
1 xxxx
2 xxxx
3 xxxx
4 xxxx
5 xxxx
6 yyyy
7 yyyy
8 zzzz
9 zzzz
10 zzzz
11 zzzz
12 zzzz"
DF <- read.table(text = Lines, header = TRUE)
下次請提供代碼以在問題中創建輸入數據。
你可以使用dplyr
包試試這個
d <- read.table(header = TRUE, text = "
Number Email
1 xxxx
2 xxxx
3 xxxx
4 xxxx
5 xxxx
6 yyyy
7 yyyy
8 zzzz
9 zzzz
10 zzzz
11 zzzz
12 zzzz")
library(dplyr)
group_by(d, Email) %>%
slice(2)
# Source: local data frame [3 x 2]
# Groups: Email
# Number Email
# 1 2 xxxx
# 2 7 yyyy
# 3 9 zzzz
或者使用data.table
library(data.table)
setDT(df)[, .SD[2L], by = Email]
# Email Row.Number
# 1: xxxx 2
# 2: yyyy 7
# 3: zzzz 9
或者用基礎R
aggregate(. ~ Email, df, function(x) x[2L])
# Email Row.Number
# 1 xxxx 2
# 2 yyyy 7
# 3 zzzz 9
編輯 :使用新的數據集
df <- read.table(text = "'Row Number' emails
1 aaaa
2 aaaa
3 aaaa
4 aaaa
5 aaaa
6 aaaa
7 aaaa
8 bbbb
9 bbbb
10 cccc
11 cccc
12 cccc
13 cccc
14 cccc
15 cccc
16 cccc
17 dddd
18 eeee
19 eeee
20 eeee
21 ffff
22 ffff", header = TRUE)
運行代碼
setDT(df)[, .SD[2L], by = emails]
# emails Row.Number
# 1: aaaa 2
# 2: bbbb 9
# 3: cccc 11
# 4: dddd NA
# 5: eeee 19
# 6: ffff 22
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.