[英]reshape data wide to long for multiple variables in R
我有一個數據集,顯示每個銀行的投資以及與此投資相關的美元價值。 當前數據看起來像這樣。 我有inv
和amt
變量,范圍從1擴展到43。
bankid year location inv1 amt1 inv2 amt2 ... inv43 amt43
1 1990 NYC AIG 2000 GM 4000 Ford 6000
但我希望數據看起來像這樣
bankid year location inv number amt
1 1990 NYC AIG 1 2000
1 1990 NYC GM 2 4000
...
1 1990 NYC Ford 43 6000
在Stata中,我將使用此代碼
reshape long inv amt, i(bankid location year) j(number)
R中的等效代碼是什么?
reshape
可以做到這一點。 在這里,我使用的是發布的數據子集,其中有時間變量1、2和43:
x <- read.table(header=TRUE, text='bankid year location inv1 amt1 inv2 amt2 inv43 amt43
1 1990 NYC AIG 2000 GM 4000 Ford 6000 ')
x
## bankid year location inv1 amt1 inv2 amt2 inv43 amt43
## 1 1 1990 NYC AIG 2000 GM 4000 Ford 6000
v <- outer(c('inv', 'amt'), c(1,2,43), FUN=paste0)
v
## [,1] [,2] [,3]
## [1,] "inv1" "inv2" "inv43"
## [2,] "amt1" "amt2" "amt43"
reshape(x, direction='long', varying=c(v), sep='')
## bankid year location time inv amt id
## 1.1 1 1990 NYC 1 AIG 2000 1
## 1.2 1 1990 NYC 2 GM 4000 1
## 1.43 1 1990 NYC 43 Ford 6000 1
對於您的整個表, varying
參數將為c(outer(c('inv', 'amt'), 1:43, FUN=paste0))
(但是對於小示例而言,它將不起作用,因為缺少列)。
這里, reshape
通過檢查推斷“時間”變量varying
參數,並找到共同的元件( inv
和amt
在左側),和其他元素在右側( 1
, 2
,和43
)。 sep
參數說沒有分隔符(默認的sep
字符是.
)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.