在R中使用长度不均匀变量的熔体/铸件
我使用的是一个大数据框,我想以它为轴心,这样列中的变量就变成了顶部的行 我发现重塑包在这种情况下非常有用,除了cast函数默认为fun.aggregate=length。这大概是因为我是通过“案例”来执行这些操作的,并且测量的变量数量因案例而异 我希望透视,以便在透视数据帧中将缺少的变量表示为“NA” 换句话说,我想从一个熔化的数据帧开始,像这样:在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
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~函数)
应该可以工作。如果您用新信息编辑您的问题,我将尝试更新我的答案。