如何使用 R 中的 reshape 函数引用已定义的对象?
How do I refer to defined objects using the reshape function in R?
我无法让重塑函数 (stats::reshape) 在其参数之一中接受对已定义字符向量的引用。我不知道这是否反映了我的语法错误、函数的限制或与 R 本身的运行方式相关的更普遍的问题。
我正在使用重塑将数据从宽格式更改为长格式。我有一个包含许多重复测量值的数据集,这些测量值经过适当排序以进行重塑(x.1、x.2、x.3、y.1、y.2、y.3 等)。我已经定义了一个变量 firstlastmeasure
,其中包含需要通过重塑处理的重复测量数据的第一列和最后一列的索引(这是为了防止每次添加或删除列时都必须更改索引原始数据)。
它是这样定义的(以一种复杂的方式):
temp0 <- subset(p, select=nameoffirstcolumn:nameoflastcolumn)
lastmeasname = names(temp0[ncol(temp0)])
firstmeasname = names(temp0[1])
firstmeasindex = grep(firstmesname,colnames(p))
lastmeasindex = grep(lastmesname,colnames(p))
firstlastmeasure <- paste(firstmesindex,lastmesindex,sep=":")
我将此变量用作重塑 varying
参数的参数,如下所示:
reshape(dataset, direction = "long", varying = firstlastmeasure)
始终重塑 returns:
"Error in guess(varying) : failed to guess time-varying variables from their names".
明确使用数字索引(即 varying = 6:34
)效果很好。
paste
创建一个字符串,如果您查看 firstlastmeasure
,它将类似于 "6:34"
。如果您查看 6:34
,它将是一个向量 6 7 8 9 ... 34
。您需要定义向量,而不是将字符串粘贴在一起。 (请注意,subset
做了一些特殊处理,使 :
可以处理列名。)
如果我对你的代码的解释正确,temp0
有你想要的所有列,所以你可以
firstlastmeasure = names(temp0)
并完成它。稍微复杂一点,您可以保留 grep
代码而不使用 paste
:
firstlastmeasure = firstmeasindex:lastmeasindex
因为你输入的是名字,subset
是不必要的。最简单的方法是跳过 temp0
并执行
firstlastmeasure = grep(nameoffirstcolumn, names(p)):grep(nameoflastcolumn, names(p))
我无法让重塑函数 (stats::reshape) 在其参数之一中接受对已定义字符向量的引用。我不知道这是否反映了我的语法错误、函数的限制或与 R 本身的运行方式相关的更普遍的问题。
我正在使用重塑将数据从宽格式更改为长格式。我有一个包含许多重复测量值的数据集,这些测量值经过适当排序以进行重塑(x.1、x.2、x.3、y.1、y.2、y.3 等)。我已经定义了一个变量 firstlastmeasure
,其中包含需要通过重塑处理的重复测量数据的第一列和最后一列的索引(这是为了防止每次添加或删除列时都必须更改索引原始数据)。
它是这样定义的(以一种复杂的方式):
temp0 <- subset(p, select=nameoffirstcolumn:nameoflastcolumn)
lastmeasname = names(temp0[ncol(temp0)])
firstmeasname = names(temp0[1])
firstmeasindex = grep(firstmesname,colnames(p))
lastmeasindex = grep(lastmesname,colnames(p))
firstlastmeasure <- paste(firstmesindex,lastmesindex,sep=":")
我将此变量用作重塑 varying
参数的参数,如下所示:
reshape(dataset, direction = "long", varying = firstlastmeasure)
始终重塑 returns:
"Error in guess(varying) : failed to guess time-varying variables from their names".
明确使用数字索引(即 varying = 6:34
)效果很好。
paste
创建一个字符串,如果您查看 firstlastmeasure
,它将类似于 "6:34"
。如果您查看 6:34
,它将是一个向量 6 7 8 9 ... 34
。您需要定义向量,而不是将字符串粘贴在一起。 (请注意,subset
做了一些特殊处理,使 :
可以处理列名。)
如果我对你的代码的解释正确,temp0
有你想要的所有列,所以你可以
firstlastmeasure = names(temp0)
并完成它。稍微复杂一点,您可以保留 grep
代码而不使用 paste
:
firstlastmeasure = firstmeasindex:lastmeasindex
因为你输入的是名字,subset
是不必要的。最简单的方法是跳过 temp0
并执行
firstlastmeasure = grep(nameoffirstcolumn, names(p)):grep(nameoflastcolumn, names(p))