我正在使用我想要转动的大型数据框,以便列中的变量成为顶部的行。
我发现reshape包在这种情况下非常有用,除了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
代码dcast(data,...〜Variable)再次默认为fun.aggregate = length,它不保留原始值。
感谢您的帮助,如果有任何不清楚的地方,请告诉我们!
答案 0 :(得分:5)
只需在cast
调用中包含所有变量即可。重塑期望Value
列被称为value
,因此它会抛出警告,但仍然可以正常工作。它使用fun.aggregate=length
的原因是因为公式中缺少Case
。它汇总了Case
中的值。
尝试:cast(data, Case~Variable)
data <- data.frame(Case=c(1,1,1,2,2,3,3,3,3),
Variable=c(1,2,3,1,2,1,2,3,4),
Value=c(2.3,2.1,1.3,4.3,2.5,1.8,1.9,2.3,2.2))
cast(data,Case~Variable)
Using Value as value column. Use the value argument to cast to override this choice
Case 1 2 3 4
1 1 2.3 2.1 1.3 NA
2 2 4.3 2.5 NA NA
3 3 1.8 1.9 2.3 2.2
编辑:作为对@Jon评论的回应。如果数据框中还有一个变量,你会怎么做?
data <- data.frame(expt=c(1,1,1,1,2,2,2,2,2),
func=c(1,1,1,2,2,3,3,3,3),
variable=c(1,2,3,1,2,1,2,3,4),
value=c(2.3,2.1,1.3,4.3,2.5,1.8,1.9,2.3,2.2))
cast(data,expt+variable~func)
expt variable 1 2 3
1 1 1 2.3 4.3 NA
2 1 2 2.1 NA NA
3 1 3 1.3 NA NA
4 2 1 NA NA 1.8
5 2 2 NA 2.5 1.9
6 2 3 NA NA 2.3
7 2 4 NA NA 2.2
答案 1 :(得分:0)
这是一个解决方案。它不使用您提到的包或功能,但它可能是有用的。假设您的数据框名为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)
答案 2 :(得分:0)
为了避免警告消息,您可以根据另一个变量对数据帧进行子集化,即具有三个级别a,b,c的分类变量。因为在你的类别a的当前数据中它有70个案例,对于b 80个案例,c有90个。然后,cast函数不知道如何聚合它们。
希望这有帮助。