reshape
位於 stats
包(package)。 說明
此函數在 ‘wide’ 格式(在同一行的不同列中重複測量)和 ‘long’ 格式(在不同行中重複測量)之間重塑數據幀。
用法
reshape(data, varying = NULL, v.names = NULL, timevar = "time",
idvar = "id", ids = 1:NROW(data),
times = seq_along(varying[[1]]),
drop = NULL, direction, new.row.names = NULL,
sep = ".",
split = if (sep == "") {
list(regexp = "[A-Za-z][0-9]", include = TRUE)
} else {
list(regexp = sep, include = FALSE, fixed = TRUE)}
)
### Typical usage for converting from long to wide format:
# reshape(data, direction = "wide",
# idvar = "___", timevar = "___", # mandatory
# v.names = c(___), # time-varying variables
# varying = list(___)) # auto-generated if missing
### Typical usage for converting from wide to long format:
### If names of wide-format variables are in a 'nice' format
# reshape(data, direction = "long",
# varying = c(___), # vector
# sep) # to help guess 'v.names' and 'times'
### To specify long-format variable names explicitly
# reshape(data, direction = "long",
# varying = ___, # list / matrix / vector (use with care)
# v.names = ___, # vector of variable names in long format
# timevar, times, # name / values of constructed time variable
# idvar, ids) # name / values of constructed id variable
參數
data |
一個 DataFrame |
varying |
寬格式變量集的名稱,對應於長格式的單個變量(‘time-varying’)。這通常是變量名稱向量的列表,但它可以選擇是名稱矩陣或單個名稱向量。在每種情況下,當 |
v.names |
長格式的變量名稱對應於寬格式的多個變量。查看具體信息'。 |
timevar |
長格式的變量,用於區分來自同一組或個人的多個記錄。如果有多個記錄匹配,則將采用第一個記錄(並帶有警告)。 |
idvar |
一個或多個長格式變量的名稱,用於標識同一組/個人的多個記錄。這些變量也可以以寬格式存在。 |
ids |
用於新創建的長格式 |
times |
用於新創建的長格式 |
drop |
重塑之前要刪除的變量名稱向量。 |
direction |
字符串,部分匹配 |
new.row.names |
字符或 |
sep |
長度為1的字符向量,表示寬格式變量名稱中的分隔字符。這用於根據 |
split |
包含三個組件的列表: |
細節
盡管 reshape()
可以在各種上下文中使用,但激發應用程序的是來自縱向研究的數據,並且該函數的參數以這些術語命名和說明。縱向研究的特點是在不同時間點(假設所有單位都相同)重複測量每個被研究單位(例如個人)的相同變量,例如身高和體重。這些變量稱為time-varying變量。研究可能包括每個單元僅測量一次且不隨時間變化的其他變量(例如性別和種族);這些稱為time-constant變量。
縱向數據集的 ‘wide’ 格式表示每個單元將有一個記錄(行),通常包含一些占據單列的 time-constant 變量,以及一些占據多列的 time-varying 變量(每個時間點一列) )。同一數據集的 ‘long’ 格式表示對於每個個體將有多個記錄(行),time-constant 變量在這些記錄中保持不變,time-varying 變量在記錄中變化。 ‘long’ 格式數據集將有兩個附加變量:‘time’ 變量標識每個記錄來自哪個時間點,‘id’ 變量顯示哪些記錄引用同一單位。
轉換類型(長到寬或寬到長)由 direction
參數確定,除非 data
參數是先前調用 reshape
的結果,否則該參數是強製的。在這種情況下,隻需使用 reshape(data)
即可反轉操作(其他參數作為屬性存儲在數據幀上)。
使用 direction = "wide"
從長格式轉換為寬格式是更簡單的操作,主要在多變量分析中有用,其中數據通常被期望為 wide-format 矩陣。在這種情況下,必須指定時間變量timevar
和id變量idvar
。所有其他變量均假定為time-varying,除非通過v.names
參數顯式指定time-varying 變量。如果 time-constant 變量實際上不是常量,則會發出警告。
每個time-varying變量都以寬格式擴展為多個變量。這些擴展變量的名稱是自動生成的,除非它們以列表(或矩陣)的形式指定為 varying
參數,每個 time-varying 變量有一個組件(或行)。如果 varying
是名稱向量,則會隱式轉換為矩陣,每個 time-varying 變量占一行。如果有多個 time-varying 變量,請謹慎使用此選項,因為排序(按列,matrix
構造函數中的默認值)可能不直觀,而顯式列表或矩陣形式是明確的。
使用 direction = "long"
從寬格式轉換為長格式是更常見的操作,因為大多數(單變量)統計建模函數都期望長格式的數據。在隻有一個 time-varying 變量的簡單情況下,寬格式輸入中的相應列可以指定為 varying
參數,該參數可以是列名稱向量或相應的列索引。組合這些列的長格式輸出中相應變量的名稱可以選擇指定為 v.names
參數,並將時間變量的名稱指定為 timevar
參數。用作與寬格式中不同列相對應的時間值的值可以指定為times
參數。如果未指定 v.names
,該函數將嘗試從 varying
猜測 v.names
和 times
(在這種情況下,未使用顯式指定的 times
參數)。默認值需要像 x.1
、 x.2
這樣的變量名稱,其中 sep = "."
指定在點處拆分並將其從名稱中刪除。要讓字母順序後跟數字時間,請使用 sep = ""
。
可以通過兩種方式指定多個 time-varying 變量,即使用 varying
作為上述原子向量,或作為列表(或矩陣)。如果使用如上所述的自動變量名稱分割,第一種形式是有用的(並且是強製性的);這要求所有 time-varying 變量的名稱以相同的方式進行適當格式化,並且 v.names
未指定。如果varying
是一個列表(每個time-varying變量有一個組成部分)或一個矩陣(每個time-varying變量有一行),則不會嘗試變量名稱拆分,並且v.names
和times
通常需要被指定,盡管它們將分別默認為每個集合中的第一個變量名稱和順序時間。
此外,如果顯式給出 v.names
,則不會嘗試猜測,即使 varying
是原子向量。在這種情況下, time-varying 變量的數量被視為 v.names
的長度,並且 varying
被隱式轉換為矩陣,每個 time-varying 變量占一行。與長到寬轉換的情況一樣,矩陣是按列填充的,因此需要注意 varying
中變量名稱(或索引)的順序,就像 x.1
一樣, y.1
、 x.2
、 y.2
(即同一時間點對應的變量需要分組在一起)。
split
參數通常不是必需的。 split$regexp
組件傳遞給 strsplit
或 regexpr
,如果 split$include
是 TRUE
,則使用後者,在這種情況下,拆分發生在匹配字符串的第一個字符之後。在 strsplit
情況下,分隔符不包含在結果中,並且可以使用 split$fixed
指定 fixed-string 匹配。
值
重新整形後的 DataFrame 添加了屬性,以簡化重新整形回到原始形式的過程。
例子
summary(Indometh) # data in long format
## long to wide (direction = "wide") requires idvar and timevar at a minimum
reshape(Indometh, direction = "wide", idvar = "Subject", timevar = "time")
## can also explicitly specify name of combined variable
wide <- reshape(Indometh, direction = "wide", idvar = "Subject",
timevar = "time", v.names = "conc", sep= "_")
wide
## reverse transformation
reshape(wide, direction = "long")
reshape(wide, idvar = "Subject", varying = list(2:12),
v.names = "conc", direction = "long")
## times need not be numeric
df <- data.frame(id = rep(1:4, rep(2,4)),
visit = I(rep(c("Before","After"), 4)),
x = rnorm(4), y = runif(4))
df
reshape(df, timevar = "visit", idvar = "id", direction = "wide")
## warns that y is really varying
reshape(df, timevar = "visit", idvar = "id", direction = "wide", v.names = "x")
## unbalanced 'long' data leads to NA fill in 'wide' form
df2 <- df[1:7, ]
df2
reshape(df2, timevar = "visit", idvar = "id", direction = "wide")
## Alternative regular expressions for guessing names
df3 <- data.frame(id = 1:4, age = c(40,50,60,50), dose1 = c(1,2,1,2),
dose2 = c(2,1,2,1), dose4 = c(3,3,3,3))
reshape(df3, direction = "long", varying = 3:5, sep = "")
## an example that isn't longitudinal data
state.x77 <- as.data.frame(state.x77)
long <- reshape(state.x77, idvar = "state", ids = row.names(state.x77),
times = names(state.x77), timevar = "Characteristic",
varying = list(names(state.x77)), direction = "long")
reshape(long, direction = "wide")
reshape(long, direction = "wide", new.row.names = unique(long$state))
## multiple id variables
df3 <- data.frame(school = rep(1:3, each = 4), class = rep(9:10, 6),
time = rep(c(1,1,2,2), 3), score = rnorm(12))
wide <- reshape(df3, idvar = c("school", "class"), direction = "wide")
wide
## transform back
reshape(wide)
也可以看看
stack
,aperm
; relist
用於重塑 unlist
的結果。 xtabs
和 as.data.frame.table
用於創建列聯表並將其轉換回數據幀。
相關用法
- R residuals 提取模型殘差
- R relevel 因子水平重新排序
- R reorder.default 因子水平重新排序
- R rect.hclust 在層次集群周圍繪製矩形
- R replications 條款的重複次數
- R read.ftable 操作平麵列聯表
- R reorder.dendrogram 重新排序樹狀圖
- R rWishart 隨機 Wishart 分布式矩陣
- R r2dtable 具有給定邊際的隨機 2 向表
- R runmed 運行中位數 – 穩健散點圖平滑
- R stlmethods STL 對象的方法
- R medpolish 矩陣的中值波蘭(穩健雙向分解)
- R naprint 調整缺失值
- R summary.nls 總結非線性最小二乘模型擬合
- R summary.manova 多元方差分析的匯總方法
- R formula 模型公式
- R nls.control 控製 nls 中的迭代
- R aggregate 計算數據子集的匯總統計
- R deriv 簡單表達式的符號和算法導數
- R kruskal.test Kruskal-Wallis 秩和檢驗
- R quade.test 四方測試
- R decompose 移動平均線的經典季節性分解
- R plot.stepfun 繪製階躍函數
- R alias 查找模型中的別名(依賴項)
- R qqnorm 分位數-分位數圖
注:本文由純淨天空篩選整理自R-devel大神的英文原創作品 Reshape Grouped Data。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。