duplicates drop之前,我們要做什麼?

2022-01-12 Stata and Python數據分析

本文作者:俞詩琪

文字編輯:王碧琪

技術總編:李朋衝

在數據處理中,我們經常會遇到一個數據集中有多行重複觀測值的情形。這不僅耗費更多的存儲空間,還可能降低工作效率甚至是分析結果的準確性。通常而言,我們可以採用duplicates drop批量刪除數據集中的這些重複項。

 

當然,對整個數據集刪除重複觀測值是最簡單的情形,更為常見的,是對於幾個變量的聯合取值進行重複值的剔除。我們當然可以使用duplicates命令來完成這項工作,只是,所有的刪除都不能貿然進行,對重複觀測值進行審查,是非常有必要的。這個過程也會加深我們對於數據結構的了解,從而更好地為實證研究服務。在本文中,我們將會介紹,刪除之前,我們需要做些什麼。

 

首先,我們使用auto數據集,溫習一下duplicates命令在刪除重複項中的妙用。其基本語法如下:

 

duplicates drop [if] [in]

duplicates drop varlist [if] [in], force

當不加變量名時,表示對整個數據集進行剔重;反之,則表示僅對選定變量的取值進行剔重。其後跟的force選項,表示強力刪除選定變量的重複項。

 

我們先用expand命令複製數據集前兩行觀測值,然後用duplicates drop對整個數據集進行剔重,程序及結果如下:

sysuse auto, clearexpand 21 in 1/2 duplicates drop

對整個數據集,刪除了40條重複值,僅保留其第一次出現的觀測值。

 

我們也可保留變量turn的前5行觀測值,並使用duplicates drop命令刪除其中的turn的重複值。程序及結果如下:

sysuse auto, clearkeep in 1/5list make turn

duplicates drop turn, force //只保留第一個重複值

可知,前五行中,變量turn的兩條重複值都被刪除(對應品牌分別為:「AMC Pacer」和「Buick Century」),僅保留第一個turn取值為40的觀測值(對應品牌為:「AMC Concord」)。

 

在此基礎上,我們進一步展示duplicates命令在報告、列示及標記變量重複項方面的強大功能。

 

 

duplicates命令可報告整個數據集或者特定變量的重複值個數情況。其基本語法如下:

duplicates report [varlist] [if] [in]


其中,varlist可表示為一個或多個變量名,若選取變量不止一個,則顯示所選變量的聯合取值情況;如果不加varlist,則表示查看整個數據集的重複值情況。

 

在本例中,我們以auto.dta中的變量trunk和turn為例,報告其重複項情況。需注意的是,這裡報告的是聯合取值的重複項情況。程序和結果如下:

 

sysuse auto, clearduplicates report trunk turn

結果顯示,出現一次(copies=1)的觀測值有40條,表明數據集的74條觀察值中,trunk和turn的聯合取值有40條是unique observations;出現兩次的觀測值有22條,此時surplus為11,表明存在11條重複值。依據每一行結果,也可推斷出變量trunk和turn有55(40+11+4)個不同的聯合取值。

 

 

在上例中,我們已經知道觀測值的重複情況,想要進一步了解是哪一行的哪個值重複,則可通過命令duplicates examples查看。它可以列示重複項的某一個具有代表性的觀測值,並顯示其所在行數及出現次數。該命令的基本語法如下:

 

duplicates examples [varlist] [if] [in] [, options]

 

這裡依然對變量trunk和turn進行分析,查看重複項的具體位置。程序和結果如下:

duplicates examples trunk turn 

其中,表頭#代表出現次數,e.g.obs代表每組其中一個重複項所在行數。以表格第一行為例,變量trunk和turn取值為8和38的組合出現兩次,位於第45行。上表的結果與(1)中的結果也一一對應,即出現兩次的有11組、出現3次有4組。

 

 

更加直觀地,我們可以採用duplicates tag命令,通過生成新變量的方式標記重複項與非重複項。其基本語法如下:

 

duplicates tag [varlist] [if] [in], generate(newvar)

 

其中,newvar為新產生的變量,用於定義所在行對應觀測值的多餘次數。

 

依然選取變量trunk和turn進行分析,並生成新變量copy。程序及部分結果如下:

duplicates tag trunk turn, gen(copy)list trunk turn copy

如上,變量copy顯示了trunk和turn聯合取值的重複情況。其中,copy取值為0時表示不存在重複項,即該行觀測值在整個數據集中僅出現一次;相應地,copy取值為1時表示重複一次,即該行觀測值在整個數據集中出現兩次。以此類推。

 

 

duplicates有一些比較實用的選項,可以更好地幫助我們在Stata結果窗口裡查看重複值(比如,我們可以使用duplicates list列示重複觀測值)。下面我們介紹幾個主要選項:

compress:壓縮結果顯示時的列寬

nocompress:使用display格式報告結果,且不壓縮列寬

fast:與nocompress選項作用類似,如果是大樣本,程序運行時間上會有所縮短

string(#):報告結果中,字符串形式的變量值僅保留#個字符,默認值是10個字符

clean:不顯示分隔線

divider:每一列都顯示一道分隔線

separator:可定義每幾行顯示一道分隔線,默認的是每5行顯示一道分隔線

sepby(varlist):當變量varlist的值發生變化時,設置一道分隔線

nolabel:顯示具體的數值,而非值標籤,比如foreign變量

 

同樣,我們用auto數據集舉例,保留變量make、price、mpg、rep78和foreign,並且複製數據集前兩行觀測值,幫助大家更好理解這些選項。程序及結果截圖如下:

sysuse auto, clearkeep make price mpg rep78 foreignexpand 2 in 1/2duplicates list //正常顯示列寬br

duplicates list, compress //壓縮顯示時的列寬,此處壓縮表頭為goup:和obs:的列br

duplicates list make, str(5) //縮減字符串的顯示長度至5個字符br

此外還有:

duplicates list, sepby(price) //依據目標變量price進行分隔,如果price的值發生變化,就設置一道分隔線br

由此可見,我們可以運用以上選項,使數據結果的列示更簡潔、明了,另外還有fast、separator等選項,由於篇幅有限,這裡不做贅述,大家有興趣可以自己運用這些選項,體會它們在實際操作中的作用。

 

總體而言,這個命令用法很簡單,功能也很實用,那麼大家都掌握了嗎?趕緊來試一試吧!

對我們的推文累計打賞超過1000元,我們即可給您開具發票,發票類別為「諮詢費」。用心做事,不負您的支持!

數據含義記不住?—— label「大神」來幫忙

實戰演練-如何獲取眾籌項目的團隊信息

Zipfile(一)

tabplot命令

Jupyter Notebook不為人知的秘密

字符串方法(三)

數據,我要「拷打」你

關於我們

微信公眾號「Stata and Python數據分析」分享實用的stata、python等軟體的數據處理知識,歡迎轉載、打賞。我們是由李春濤教授領導下的研究生及本科生組成的大數據處理和分析團隊。

此外,歡迎大家踴躍投稿,介紹一些關於stata和python的數據處理和分析技巧。投稿郵箱:statatraining@163.com投稿要求:
1)必須原創,禁止抄襲;
2)必須準確,詳細,有例子,有截圖;
注意事項:
1)所有投稿都會經過本公眾號運營團隊成員的審核,審核通過才可錄用,一經錄用,會在該推文裡為作者署名,並有賞金分成。
2)郵件請註明投稿,郵件名稱為「投稿+推文名稱」。
3)應廣大讀者要求,現開通有償問答服務,如果大家遇到有關數據處理、分析等問題,可以在公眾號中提出,只需支付少量賞金,我們會在後期的推文裡給予解答。

相關焦點

  • 看美劇學英語:drop the ball
    看劇要爽,英語也要棒,
  • 「mic drop」可別理解成「話筒掉了」 | 地道英語
    Mic drop!「Mic drop」! What?!什麼?! I think the lead singer dropped the microphone once.我想主唱把麥克風掉過一次。 We say "mic drop" at the end of a sentence after we have made an impressive or pertinent point in a discussion,當我們在討論中提出了令人印象深刻或相關的觀點後,我們在句子末尾說「mic drop」, rendering
  • 戀愛先生第5集插曲a drop in the ocean完整版歌詞
    戀愛先生目前正在熱播上映中,後面劇情簡直不能太虐,塵著音樂簡直太合適不過了,那麼戀愛先生第5集插曲是什麼?a drop in the ocean完整版歌詞。下面就一起來看看吧!【戀愛先生主題曲片尾曲所有背景音樂插曲歌詞歌曲盤點介紹】  戀愛先生第5集插曲是什麼  戀愛先生第五集插曲是《a drop in the ocean》是Ron Pope演唱的一首歌曲,別稱《滄海一粟》。  靳東的眼神挺抓人的,這部《戀愛先生》讓我們認識了一個不一樣的靳東,程皓賤賤噠,小眼神沒了明樓的銳利,多了些欠揍。
  • 7.20 | ONE DROP - 新歌首發音樂會 NEW ORIGINALS RELEASE
    它有一些教義,生活可能並不總是容易的,無論你做什麼,不要輕易的去放棄,在生活中無論有多麼艱難總會過去的。Togetherness,是鼓勵人類學會共存的歌曲,無論信仰、社會地位或種族不同,雷鬼音樂可以是一個焦點,使我們大家聚集在一起。Beijing,讚美美麗城市北京的歌曲,音樂中充滿活力。一個從未沉睡的城市,讓我們聚集在一起的城市。
  • 【Affilate聯盟】獨立站的drop shipping模式,如何結合速賣通同時...
    (思維導圖)大家都知道做shopify和速賣通結合的drop shipping模式,是可以實現無貨源並且一件代發的,但是我們了解過亞馬遜的affilate聯盟,今天我們也一起學習了解一下,速賣通的affilate聯盟吧!
  • You make my jaw drop.是下巴掉了嗎?應翻譯為瞠目結舌
    one's jaw drops目瞪口呆;瞠目結舌jaw是「下巴」,大部分人感到驚訝的時候,嘴巴會張開,如果非常驚訝就可以用這個說法強調驚訝的程度。主語如果是人,要改成drop one's jaw.另外,要形容令人驚訝的人或事物時,可以用jaw-dropping。看看老外聊天時怎麼用one's jaw drops:Monica: It was a perfect candle-lit dinner.
  • 面試官靈魂一問:MySQL 的 delete、truncate、drop 有什麼區別?
    「delete from table 呀」「怪不得,其實要刪除MySQL數據是有好幾種方式的,有些場景下是不應該用DELETE的,比如你這種情況。好了,讓我來給你講一下吧。」MySQL刪除數據的方式都有哪些?
  • 中國新說唱dj drop the beat是什麼意思 唱中常見術語介紹
    在中國新說唱中,選手在表演前會對著音響師說一句「dj drop the beat」,那麼dj drop the beat什麼意思?下面一起來看看dj drop the beat翻譯吧!  dj drop the beat什麼意思  dj drop the beat就是給點拍子,放點音樂的意思,再接地氣一點的解釋就是我準備好了,放伴奏吧!老鐵,放歌吧!drop在這裡作動詞,beat在這裡作名詞拍子的意思。  說到最近最火的綜藝節目,當屬「中國新說唱」了。
  • Delete、Truncate、Drop,千萬別用錯了..
    「delete from table 呀」「怪不得,其實要刪除MySQL數據是有好幾種方式的,有些場景下是不應該用DELETE的,比如你這種情況。好了,讓我來給你講一下吧。」MySQL刪除數據的方式都有哪些?
  • 如何開始你的跨境電商Dropshipping?
    以前,如果我們說開店,一般都是說在某個地方租個店面,然後進貨,比如100個產品。買回來後就等著顧客上門做生意。賣了一段時間後發現不好賣,只賣了10個,那剩下的90個就純虧,還不算上店面租金水電等各種開銷。但在今天這種電商盛行的環境下,我們說開店一般都是說開個線上店鋪。
  • 《唐探3》做錯了什麼?|來自150萬字影評的證據
    這部充滿了日本元素,已經有兩部前傳打底,甚至有劉德華加入的《唐探3》,究竟做錯了什麼才能惹得這麼多的差評,真是讓人感到好奇,於是小編決定從其影評中尋找答案,說幹就幹,下面開始。關於豆瓣影評的獲取,之前的推文已經有過詳細介紹。主要分為兩次爬蟲:第一次爬蟲需要找到目標影評所在網址,對該電影影評下的所有頁面遍歷,提取每位用戶影評的標題與連結;第二次爬蟲通過連結進行抓取,提取所需要的影評內容。
  • 英文聖詩 | One Single Drop 一滴寶血
    In him we have redemption through his blood, the forgiveness of sins, in accordance with the riches of God’s
  • IR Drop分析之Redhawk分析流程
    靜態IR drop現象產生的原因主要是電源網絡的金屬連線的分壓,是由於金屬連線的自身電阻分壓造成的。電流經過內部電源連線的時候產生電源壓降。所以靜態IR drop主要跟電源網絡的結構和連線細節有關。因此靜態IR drop主要考慮電阻效應,分析電阻的影響即可。動態IR drop是電源在電路開關切換的時候電流波動引起的電壓壓降。
  • 【美劇英語】之drop in on
    非常開心哦能給大家分享實用乾貨,今天呢就會通過絕望主婦的一句臺詞來給大家講講drop的地道用法。❤drop in on sb. 順道拜訪某人e.g. She thinks of a reason for dropping in on me unannounced.Jason dropped in on us last week.
  • 抖音幫幫幫被捉噔噔噔噔是什麼歌 bomb a drop完整歌詞介紹
    抖音幫幫幫被捉噔噔噔噔是什麼歌 bomb a drop完整歌詞介紹  Bomb A Drop (投一枚炸彈) - Garmiani  Written by:Kemar Ottey/Jiar Garmiani/Delroy Pairt/Ricardo Johnson  Garmiani like a one man army
  • MySQL 中 delete、truncate、drop 關鍵字的區別有哪些,該如何選擇?
    「delete from table 呀」「怪不得,其實要刪除MySQL數據是有好幾種方式的,有些場景下是不應該用DELETE的,比如你這種情況。好了,讓我來給你講一下吧。」MySQL刪除數據的方式都有哪些?咱們常用的三種刪除方式:通過 delete、truncate、drop 關鍵字進行刪除;這三種都可以用來刪除數據,但場景不同。
  • 「drop a line」別理解成「掉了一根線」
    大家好,今天我們分享一個非常有用且地道的表達——drop a line, 這個短語的含義不是指「掉了一根線」,其正確的含義是:drop a line 給…寫信(尤指非正式的簡短書信) Just drop
  • 【滑板黑歷史】盤點經典Drop-in,簡單動作可以如此驚心動魄
    現在,大家開始挑戰更高更陡的drop-in。所以,Jenkem盤點了一些經典的drop-in,讓我們看看這個簡單的動作可以多麼驚心動魄。這個地形位於Queen Mary號的上層甲板上,要到達那裡,需要從一部移動著的電梯裡面跳窗而出。Jimmy一共做出了三次慘痛的嘗試,保安纏著他還以為他要自殺呢,但是這個瘋狂的男人平穩落地。後來,沒有手機也沒有錢,他不得不帶著腫成沙灘球那麼大的屁股滑了15英裡去和Rowley匯合,Rowley在保安出現的時候就離開了。
  • 每日習語:a drop in the ocean/bucket
    新東方網>英語>英語學習>口語>每日一句英語>正文每日習語:a drop in the ocean/bucket 2013-02-18 15:53 來源:恆星英語 作者:
  • Thats What I Like中英文歌詞 翻譯
    what's hatnin'?  是我無疑  Turn around and drop it for a player  快轉過身來鼓掌歡迎  Drop, drop it for me  為我的到來致意  I'll rent a beach house in Miami  我租下邁阿密的沙灘豪宅  Wake up with no jammies