亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用dplyr刪除重復的行

使用dplyr刪除重復的行

SMILET 2019-10-08 11:20:22
我有一個這樣的data.frame-set.seed(123)df = data.frame(x=sample(0:1,10,replace=T),y=sample(0:1,10,replace=T),z=1:10)> df   x y  z1  0 1  12  1 0  23  0 1  34  1 1  45  1 0  56  0 1  67  1 0  78  1 0  89  1 0  910 0 1 10我想刪除基于前兩列的重復行。預期產量-df[!duplicated(df[,1:2]),]  x y z1 0 1 12 1 0 24 1 1 4我正在尋找使用dplyr包的解決方案。
查看完整描述

3 回答

?
幕布斯7119047

TA貢獻1794條經驗 獲得超8個贊

注意:dplyr現在包含distinct用于此目的的功能。


原始答案如下:


library(dplyr)

set.seed(123)

df <- data.frame(

  x = sample(0:1, 10, replace = T),

  y = sample(0:1, 10, replace = T),

  z = 1:10

)

一種方法是分組,然后僅保留第一行:


df %>% group_by(x, y) %>% filter(row_number(z) == 1)


## Source: local data frame [3 x 3]

## Groups: x, y

## 

##   x y z

## 1 0 1 1

## 2 1 0 2

## 3 1 1 4

(在dplyr 0.2中,您將不需要啞z變量,并且只需要編寫即可row_number() == 1)


我也一直在考慮添加一個slice()功能,如:


df %>% group_by(x, y) %>% slice(from = 1, to = 1)

或者,也許可以通過變種來unique()選擇要使用的變量:


df %>% unique(x, y)


查看完整回答
反對 回復 2019-10-08
?
拉丁的傳說

TA貢獻1789條經驗 獲得超8個贊

這是使用的解決方案dplyr 0.3。


library(dplyr)

set.seed(123)

df <- data.frame(

  x = sample(0:1, 10, replace = T),

  y = sample(0:1, 10, replace = T),

  z = 1:10

)


> df %>% distinct(x, y)

    x y z

  1 0 1 1

  2 1 0 2

  3 1 1 4

更新為dplyr 0.5


dplyr版本0.5的默認行為是distinct()僅返回...參數中指定的列。


為了獲得原始結果,您現在必須使用:


df %>% distinct(x, y, .keep_all = TRUE)


查看完整回答
反對 回復 2019-10-08
?
月關寶盒

TA貢獻1772條經驗 獲得超5個贊

大多數時候,最好的解決方案是使用distinct()dplyr,正如已經建議的那樣。


但是,這是另一種使用slice()dplyr函數的方法。


# Generate fake data for the example

  library(dplyr)

  set.seed(123)

  df <- data.frame(

    x = sample(0:1, 10, replace = T),

    y = sample(0:1, 10, replace = T),

    z = 1:10

  )


# In each group of rows formed by combinations of x and y

# retain only the first row


    df %>%

      group_by(x, y) %>%

      slice(1)

與使用distinct()功能的區別

此解決方案的優點是,它可以使從原始數據幀中保留哪些行變得明確,并且可以與該arrange()函數很好地配對。


假設您有客戶銷售數據,并且希望為每個客戶保留一條記錄,并且希望該記錄成為他們最近一次購買的記錄。然后,您可以編寫:


customer_purchase_data %>%

   arrange(desc(Purchase_Date)) %>%

   group_by(Customer_ID) %>%

   slice(1)


查看完整回答
反對 回復 2019-10-08
  • 3 回答
  • 0 關注
  • 1765 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號