6 回答
TA貢獻(xiàn)1898條經(jīng)驗 獲得超8個贊
使用reshape功能:
reshape(dat1, idvar = "name", timevar = "numbers", direction = "wide")
TA貢獻(xiàn)1810條經(jīng)驗 獲得超4個贊
新的(2014年)tidyr包也做到這一點簡單地說,與gather()/ spread()是的條款melt/ cast。
library(tidyr)spread(dat1, key = numbers, value = value)
來自github,
tidyr是一個重新reshape2設(shè)計,旨在配合整潔的數(shù)據(jù)框架,并與數(shù)據(jù)分析建立一個堅實的管道,magrittr并dplyr建立一個堅實的管道。就像
reshape2重塑tidyr不到一樣,做得不到reshape2。它專門用于整理數(shù)據(jù),而不是一般的重塑reshape2,或重塑的一般聚合。特別是,內(nèi)置方法僅適用于數(shù)據(jù)幀,并且不tidyr提供邊距或聚合。
TA貢獻(xiàn)1801條經(jīng)驗 獲得超16個贊
您可以使用該reshape()函數(shù)或reshape包中的melt()/ cast()functions 執(zhí)行此操作。對于第二個選項,示例代碼是
library(reshape)
cast(dat1, name ~ numbers)
或使用 reshape2
library(reshape2)
dcast(dat1, name ~ numbers)
TA貢獻(xiàn)1853條經(jīng)驗 獲得超6個贊
如果性能是一個問題的另一個選擇是使用'的融合和dcast函數(shù)data.table的擴(kuò)展reshape2
library(data.table)
setDT(dat1)
dcast(dat1, name ~ numbers, value.var = "value")
# name 1 2 3 4
# 1: firstName 0.1836433 -0.8356286 1.5952808 0.3295078
# 2: secondName -0.8204684 0.4874291 0.7383247 0.5757814
而且,從data.table v1.9.6開始,我們可以在多列上進(jìn)行轉(zhuǎn)換
## add an extra column
dat1[, value2 := value * 2]
## cast multiple value columns
dcast(dat1, name ~ numbers, value.var = c("value", "value2"))
# name value_1 value_2 value_3 value_4 value2_1 value2_2 value2_3 value2_4
# 1: firstName 0.1836433 -0.8356286 1.5952808 0.3295078 0.3672866 -1.6712572 3.190562 0.6590155
# 2: secondName -0.8204684 0.4874291 0.7383247 0.5757814 -1.6409368 0.9748581 1.476649 1.1515627
TA貢獻(xiàn)2019條經(jīng)驗 獲得超9個贊
使用您的示例數(shù)據(jù)框,我們可以:
xtabs(value ~ name + numbers, data = dat1)
TA貢獻(xiàn)1820條經(jīng)驗 獲得超10個贊
其他兩個選擇:
基礎(chǔ)包:
df <- unstack(dat1, form = value ~ numbers)
rownames(df) <- unique(dat1$name)
df
sqldf 包:
library(sqldf)
sqldf('SELECT name,
MAX(CASE WHEN numbers = 1 THEN value ELSE NULL END) x1,
MAX(CASE WHEN numbers = 2 THEN value ELSE NULL END) x2,
MAX(CASE WHEN numbers = 3 THEN value ELSE NULL END) x3,
MAX(CASE WHEN numbers = 4 THEN value ELSE NULL END) x4
FROM dat1
GROUP BY name')
- 6 回答
- 0 關(guān)注
- 1232 瀏覽
添加回答
舉報
