簡體   English   中英

在R中選擇每組的第二次觀察

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM