2017-03-01 20 views
1

第一次發佈,主要是因爲我厭倦了將我的頭撞在牆上。創建一個ID來重塑數據集

在此感謝提前看。

我有一個看起來像這樣的數據幀:

state city x y z 
1 OR Portland 8 10 1 
2 OR Portland 8 10 4 
3 OR Portland 8 10 10 
4 NY New York 29 15 10 
5 NY New York 29 15 18 
6 NJ Trenton 8 10 50 
7 NJ Trenton 8 10 60 
8 NJ Trenton 8 10 70 
9 WA Seattle 1 70 6 
10 WA Seattle 1 70 7 
11 WA Seattle 1 70 8 
12 WA Seattle 1 70 9 
13 WA Seattle 1 70 10 
14 WA Seattle 1 70 11 

我一直在試圖重塑它看起來像這樣:

state city x y z.1 z.2 z.3 z.4 z.5 z.6 
OR Portland 8 10 1 4 10 
NY New York 29 15 10 18 
NJ Trenton 8 10 50 60 70 
WA Seattle 1 70 6 7 8 9 10 11 

我一直在使用包reshape2和代碼看起來像這樣:

df <- melt(data,id.vars = c("state","city","x","y"),measure.vars = "z") 
wide <- dcast(df, state + city + x + y ~ variable) 

它返回每個id.vars集的變量z的計數。

我也試過這樣:

wide <- dcast(df, state + city + x + y ~ value) 

,看起來像這樣:

state city x y 1 4 6 7 etc... 
OR Portland 8 10 1 1 0 0 
NY New York 29 15 0 0 0 0 
NJ Trenton 8 10 0 0 0 0 
WA Seattle 1 70 0 0 1 1 

這是接近我正在尋找,但將是非常困難用於查找信息。

如果我錯了,告訴我,但它看起來像我需要一個id變量爲狀態,城市,x,y的每個重複值。

我一直沒有想到或找到任何可以讓我創建列的數量,如下所示的重複值。

state city x y z num 
1 OR Portland 8 10 1 1 
2 OR Portland 8 10 4 2 
3 OR Portland 8 10 10 3 
4 NY New York 29 15 10 1 
5 NY New York 29 15 18 2 
6 NJ Trenton 8 10 50 1 
7 NJ Trenton 8 10 60 2 
8 NJ Trenton 8 10 70 3 
9 WA Seattle 1 70 6 1 
10 WA Seattle 1 70 7 2 
11 WA Seattle 1 70 8 3 
12 WA Seattle 1 70 9 4 
13 WA Seattle 1 70 10 5 
14 WA Seattle 1 70 11 6 

我將不勝感激任何幫助或想法在哪裏尋找解決方案。

最佳,

-n

+0

嗯,我失去的東西 - 我不認爲這是真的重複。鏈接的問題查找創建連續的i.ds,而這個請求按州和城市列出現有的ID。使用'library(data.table)',我們可以使用'dt [,。(z = list(z)),by =。(state,city,x,y)]' – dww

+0

@dww - 它本質上是一樣的問題 - 'dat $ time < - ave(rownames(dat),dat [c(「state」,「city」,「x」,「y」)],FUN = seq_along);例如,重塑(dat,idvar = c(「state」,「city」,「x」,「y」),direction =「wide」)例如只需要創建一個順序id。 – thelatemail

+0

感謝您的幫助!我應該可以將它拼湊在一起。 – nhol

回答

1

如果使用dplyr是你可以使用一個選項:

library(dplyr) 
df %>% 
    group_by(state,city, x, y) %>% 
    mutate(n = row_number()) %>% 
    spread(n, z, sep = '') 

注意順序丟失壽