我有以下data.frame:
group <- sample(c("egyptian", "american", "irish", "australian"), 50, TRUE)
E <- c(rnorm(50, 5, 6))
F <- c(rnorm(50, 7.8, 4.5))
G <- c(rnorm(50, 65, 16.7))
test <- data.frame(group=group, E=E, F=F, G=G)
我的目标是生成一个data.frame,其中包括group作为标题,并在下面的E中列出其对应的值.
像这样的data.frame:
egyptian <- c(rnorm(50,5,6))
american<- c(rnorm(50,5,6))
irish<- c(rnorm(50,5,6))
australian<- c(rnorm(50,5,6))
test <- data.frame(egyptian=egyptian, american=american,
irish=irish, australian=australian)
我尝试将2列分配,然后使用dcast,但它失败了.
是否有可能从长到宽dcast 2列?
最佳答案 正如@jbaums在评论中提到的,每个组的大小不一样.
table(test$group)
# american australian egyptian irish
# 7 18 9 16
设置种子以使其可重复性也更好.即
set.seed(1)
group <- sample(c("egyptian", "american", ....)
要将初始输入转换为预期输出(基于“E”列),我们可能需要根据分组变量(“组”)创建序列
library(reshape2)
test$ind <- with(test, ave(seq_along(group), group, FUN=seq_along))
dcast(test, ind~group, value.var='E')
或者另一个基本R选项是使用xtabs
xtabs(E~ind+group, test)
但请注意,这将为那些缺失值组合填充“0”.对于dcast,默认情况下,我们将为缺失的组合获得“NA”,我们可以通过fill参数更改.