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。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。