我試圖用R來做一些數據管理。在R中合併類似觀察
我有一個數據框,作爲多個變量(+200列)和許多觀察(+10,000行)。有很多缺失的數據,以及重複或未完成的觀察結果。 一個觀察應該等於一個人(1行= 1獨一無二的人)
這裏是集例子(感謝對@aosmith):
dat = data.frame(email = c(rep(c("[email protected]", "[email protected]"), each = 2), NA),
name = c(NA, "Alfred C.", NA, "Bob V.", "Cathy L."),
var1 = c(2, 2, NA, NA, 1),
var2 = c(1, NA, 3, NA, 1),
var3 = c(NA, NA, 1, 0, 2),
var4 = c(0, NA, NA, NA, NA))
我要合併我的觀察,這樣到底,一行等於一個人。識別我使用電子郵件的人。當沒有電子郵件時,我想保留所有觀察結果(所以如果電子郵件丟失,我不希望R刪除觀察結果。每個觀察,因爲沒有電子郵件被認爲是一個獨特的觀察)。
對於我們可以找到相同電子郵件地址的時代,我們需要R來更新每個變量的字段,當我們發現後續觀察(使用相同的電子郵件地址)時,我們得到的數據缺失數據。如果已經存在一個或多個變量的現有數據,我們希望R創建一個新的變量來存儲不同的值。
下面是一個例子,使這更容易理解。
我們需要改變這樣的:通過保持信息時
email name var1 var2 var3 var4 ... var200
[email protected] <NA> 2 1 NA 0 ... .
[email protected] Alfred C. 2 NA NA NA ... .
[email protected] <NA> NA 3 1 NA ... .
[email protected] Bob V. NA NA 0 NA ... .
<NA> Cathy L. 1 1 2 NA ... .
進入這個像這樣(具有相同的電子郵件相結合的行和保持所有信息在一行中同一個人,但也我們無法確定該人的電子郵件地址相同的,所以,如果郵件是NA,我們必須保持它,如果它是一個獨特的人):
email name var1 var2 var3a var3b var4 ... var200
[email protected] Alfred C. 2 1 NA NA 0 . .
[email protected] Bob V. NA 3 1 0 NA . .
<NA> Cathy L. 1 1 2 . NA . .
[email protected] . . etc etc etc etc etc etc
是否有一個簡單的方法來做到這一點?我在dplyr和tidyr兩天裏苦苦掙扎...... 最後,一行應該包含我們能夠使用電子郵件變量識別的一個人的信息。我們還需要保留所有其他我們無法識別屬於一個人的觀察結果。
謝謝你的幫助和時間!
你的意思是你有電子郵件,推特或兩者兼而有之? NA中顯示缺少的電子郵件值? – aosmith 2014-10-12 15:40:03
twitter只是另一個變量,我認爲它很混亂,所以我會從示例中刪除它。我們想要使用他們的電子郵件地址合併來自同一人的觀察結果。 – leakciM 2014-10-12 16:23:58
我更新了我的答案,這可能有幫助,也可能沒有幫助。如果您將可重現的示例數據集(您的示例數據集沒有任何缺少的電子郵件值),它會有所幫助。 – aosmith 2014-10-12 17:41:56