在R中使用长度不均匀变量的熔体/铸件

在R中使用长度不均匀变量的熔体/铸件,r,casting,reshape,melt,R,Casting,Reshape,Melt,我使用的是一个大数据框,我想以它为轴心,这样列中的变量就变成了顶部的行 我发现重塑包在这种情况下非常有用,除了cast函数默认为fun.aggregate=length。这大概是因为我是通过“案例”来执行这些操作的,并且测量的变量数量因案例而异 我希望透视,以便在透视数据帧中将缺少的变量表示为“NA” 换句话说,我想从一个熔化的数据帧开始,像这样: Case | Variable | Value 1 1 2.3 1 2 2.1 1

我使用的是一个大数据框,我想以它为轴心,这样列中的变量就变成了顶部的行

我发现重塑包在这种情况下非常有用,除了cast函数默认为fun.aggregate=length。这大概是因为我是通过“案例”来执行这些操作的,并且测量的变量数量因案例而异

我希望透视,以便在透视数据帧中将缺少的变量表示为“NA”

换句话说,我想从一个熔化的数据帧开始,像这样:

Case | Variable | Value
 1         1        2.3
 1         2        2.1
 1         3        1.3
 2         1        4.3
 2         2        2.5
 3         1        1.8
 3         2        1.9
 3         3        2.3
 3         4        2.2
Case | Variable 1 | Variable 2 | Variable 3 | Variable 4
 1         2.3          2.1          1.3         NA
 2         4.3          2.5          NA          NA
 3         1.8          1.9          2.3         2.2 
对这样的事情:

Case | Variable | Value
 1         1        2.3
 1         2        2.1
 1         3        1.3
 2         1        4.3
 2         2        2.5
 3         1        1.8
 3         2        1.9
 3         3        2.3
 3         4        2.2
Case | Variable 1 | Variable 2 | Variable 3 | Variable 4
 1         2.3          2.1          1.3         NA
 2         4.3          2.5          NA          NA
 3         1.8          1.9          2.3         2.2 
代码dcast(data,…~Variable)再次默认为fun.aggregate=length,它不保留原始值


谢谢你的帮助,如果有什么不清楚的请告诉我

这里有一个解决方案。它没有使用您提到的包或功能,但它可能有用。假设您的数据帧被称为
df

M <- matrix(NA,
            nrow = length(unique(df$Case)),
            ncol = length(unique(df$Variable))+1,
            dimnames = list(NULL,c('Case',paste('Variable',sort(unique(df$Variable))))))
irow <- match(df$Case,unique(df$Case))
icol <- match(df$Variable,unique(df$Variable)) + 1
ientry <- irow + (icol-1)*nrow(M)
M[ientry] <- df$Value
M[,1] <- unique(df$Case)

M只需在
cast
调用中包含所有变量即可。整形需要调用
Value
Value
,因此它会抛出警告,但仍然可以正常工作。它之所以使用
fun.aggregate=length
是因为公式中缺少
大小写。它聚集在
案例
中的值上

尝试:
cast(数据,大小写~变量)


data为了避免警告消息,您可以根据另一个变量对数据框进行子集,即具有三个级别a、b、c的分类变量。因为在你们当前的数据中,a类有70个案例,b类有80个案例,c类有90个案例。然后cast函数不知道如何聚合它们


希望这能有所帮助。

也许你应该在
重塑2
中尝试
dcast
?当我使用整形2运行您的
dcast
语句时,我得到了您想要的输出(即使用NA值)。同意@Joran--
整形2
是goHmm的方法,似乎我把我的示例做得太简单了,因为它确实适用于该语句。不过,对于我正在使用的大型数据集来说,这并不适用。谢谢你的评论!我仍在努力理解这句有趣的话。我有一个列标题为“Expt”、“function.”、“variable”和“value”的熔化数据框。我想在“function”下透视变量。在顶部作为“Expt”和“variable”的函数。因此我的函数是dcast(data,Expt+variable~function.)。我仍然得到“聚合函数缺失:默认为length”“错误,但是……有什么想法吗?@Jon,如果这四列都是您的
data
数据框中的所有列,那么
cast(data,Expt+variable~函数)
应该可以工作。如果您用新信息编辑您的问题,我将尝试更新我的答案。