我有以下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列吗?
答案 0 :(得分:2)
正如评论中提到的@jbaums,每个组的大小不一样。
table(test$group)
# american australian egyptian irish
# 7 18 9 16
最好设置种子以使其可重复。即。
set.seed(1)
group <- sample(c("egyptian", "american", ....)
要将初始输入转换为预期输出(基于&#34; E&#34;列),我们可能需要根据分组变量创建一个序列(&#34; group&#34;)
library(reshape2)
test$ind <- with(test, ave(seq_along(group), group, FUN=seq_along))
dcast(test, ind~group, value.var='E')
或另一个base R
选项是使用xtabs
xtabs(E~ind+group, test)
但请注意,这将填补&#39; 0&#39; 0对于那些缺失的价值组合。对于dcast
,默认情况下,我们会获得&#34; NA&#34;对于缺失的组合,我们可以通过fill
参数进行更改。