簡體   English   中英

將R中的多個變量的數據重整為寬到長

[英]reshape data wide to long for multiple variables in R

我有一個數據集,顯示每個銀行的投資以及與此投資相關的美元價值。 當前數據看起來像這樣。 我有invamt變量,范圍從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參數,並找到共同的元件( invamt在左側),和其他元素在右側( 12 ,和43 )。 sep參數說沒有分隔符(默認的sep字符是. )。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM