data.table的melt
功能特別好,因爲它可以將參數分組爲並列。它會插入一個variable
標識符列,但是你可以將它列出。
library(data.table)
melt(setDT(df), # set df to a data.table
measure.vars = list(c(1,3), c(2,4)), # set column groupings
value.name = 'V')[ # set output name scheme
, -1, with = F] # subset out variable column
## V1 V2
## 1: -75.6364 -33.3363
## 2: -62.4546 -42.6754
## 3: -53.1363 -48.3385
## 4: -51.9633 -37.6143
## 5: -68.6320 -35.7657
## 6: -60.0532 -41.7773
## 7: -56.0956 -47.4524
## 8: -60.3062 -54.7817
在基R,所述stack
功能熔化以長,但不能用於平行的列。但是,您可以將列名轉換爲可用於unstack
的索引,或者僅使用類似於rep(rep(1:2, each = 4), 2)
的東西手動創建合適的矢量。
df2 <- stack(df)
# change ind (variable/key/index) column to number, take modulo 2 to separate even/odd,
# and invert 0/1 add 1 to make better column names
df2$ind <- 1 + !as.numeric(df2$ind) %% 2
unstack(df2)
## X1 X2
## 1 -75.6364 -33.3363
## 2 -62.4546 -42.6754
## 3 -53.1363 -48.3385
## 4 -51.9633 -37.6143
## 5 -68.6320 -35.7657
## 6 -60.0532 -41.7773
## 7 -56.0956 -47.4524
## 8 -60.3062 -54.7817
看看在'dplyr'軟件包的'join'或者base R的'merge'中。 – shayaa
看起來您想要在列V3和V4的頂部堆疊列V1和V2。是對的嗎? – eipi10
我認爲所需的輸出缺少第8行。 – alistaire