首页
学习
活动
专区
圈层
工具
发布

dcast 2列
EN

Stack Overflow用户
提问于 2015-02-18 03:01:34
回答 1查看 777关注 0票数 5

我有下面的data.frame

代码语言:javascript
复制
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

代码语言:javascript
复制
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列可以从长到宽吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-02-18 03:57:29

正如评论中提到的@jbaum,每个组的大小并不相同。

代码语言:javascript
复制
  table(test$group)
  # american australian   egyptian      irish 
  #   7         18          9         16 

此外,还最好是设置种子,使其可再生。即

代码语言:javascript
复制
  set.seed(1)
  group <- sample(c("egyptian", "american", ....)

要将初始输入转换为预期的输出(基于"E“列),我们可能需要根据分组变量("group")创建一个序列

代码语言:javascript
复制
library(reshape2) 
test$ind <- with(test, ave(seq_along(group), group, FUN=seq_along))
dcast(test, ind~group, value.var='E')

或者另一个base R选项是使用xtabs

代码语言:javascript
复制
xtabs(E~ind+group, test)

但是,请注意,对于那些缺失的值组合,这将填充“0”。对于dcast,默认情况下,我们将得到缺少的组合的"NA“,我们可以通过fill参数来更改它。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28575221

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档