我无法获得reshape函数(stats :: reshape)来接受对其参数之一中定义的字符向量的引用。我不知道这是否反映了我的错误语法,功能的限制,或者与R本身如何运作有关的更一般的问题。
我正在使用reshape将数据从宽格式更改为长格式。我有一个包含许多重复测量的数据集,这些测量结果适当地重新整形(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)
重塑总是返回:
“猜测错误(变化):无法从名称中猜出时变变量”。
明确使用数字索引(即varying = 6:34
)可以正常工作。
答案 0 :(得分:1)
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))