2017-04-26 33 views
0

我有以下列格式數據:製表量的變量作爲從每個類別的重複ID /數量的單獨列的

df.original <-data.frame(hhid = c(1001, 1001, 1001, 1002, 1002, 1003, 1004), item = c("candybar","toycar","chair","candybar", "chair", "candybar", "sled"), number= c(2, 1, 4, 3, 1, 3, 2)) 

我想通過hhid有每個項目的量的列表以下列方式:

df.desired <- data.frame(hhid = c(1001,1002,1003,1004), candybar=c(2,3,3,0), toycar=c(1,0,0,0), chair=c(4,1,0,0), sled=c(0,0,0,2)) 

我可以得到虛擬變量(基於前一個問題我在這裏,這是類似的,但不計),但在該方法中使用的表函數只是由兩列計算重複。作爲參考我在說的問題(並在不同的設置上使用)的問題是:Function to make single hhid dummy vars from duplicated hhid list (with example data code)

我寧願避免tidyverse,如果可能並使用基函數。我必須在離線的linux服務器上運行這個服務器,由於防火牆需要安裝管理員尚未安裝的軟件包(如果這是唯一的方式,只是有點麻煩的話,這可能是很困難的)。

回答

2

你在找什麼是對df格式格式轉換。 R基地有reshape。但是,如果值不存在,將不會爲您提供0。它應該是,將會是NA。您可以輕鬆地用另外一行代碼替換NA

df.desired <- reshape(df.original, idvar = "hhid", timevar = "item", direction = "wide") 
df.desired[is.na(df.desired)] <- 0 
+0

確實。這正是我正在尋找Drj的原因。謝謝! –

0

您可以使用table函數。

x = table(df.original) 

x1 = (x[,,number=1]) 

x2 = (x[,,number=2]) 
x2[(x2 == 1)] = 2 

x3 = (x[,,number=3]) 
x3[(x3 == 1)] = 3 

x4 = (x[,,number=4]) 
x4[(x4 == 1)] = 4 

x1+x2+x3+x4 

不是最好的答案,但希望它可以幫助你!

最好,