首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R reshape2 dcast:转换数据

R reshape2 dcast:转换数据
EN

Stack Overflow用户
提问于 2016-11-03 08:57:30
回答 1查看 1.4K关注 0票数 0

如何将数据X转换为Y,如

代码语言:javascript
复制
X = data.frame(
  ID = c(1,1,1,2,2),
  NAME = c("MIKE","MIKE","MIKE","LUCY","LUCY"),
  SEX = c("MALE","MALE","MALE","FEMALE","FEMALE"),
  TEST = c(1,2,3,1,2),
  SCORE = c(70,80,90,65,75)
)

Y = data.frame(
  ID = c(1,2),
  NAME = c("MIKE","LUCY"),
  SEX = c("MALE","FEMALE"),
  TEST_1 =c(70,65),
  TEST_2 =c(80,75),
  TEST_3 =c(90,NA)
)

dcast函数在reshape2中似乎有效,但在上面的示例中,它不能包括数据中的其他列,如ID、名称和性别。

假设ID列中的所有其他列都是一致的,比如Mike只能是ID 1的男性,那么我们怎么做呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-04-13 15:46:33

根据文档(?reshape2::dcast),dcast()允许在公式中使用...

"...“表示公式中未使用的所有其他变量.

这对于reshape2data.table包都是正确的,它们都支持dcast()

所以,你可以写:

代码语言:javascript
复制
reshape2::dcast(X, ... ~ TEST, value.var = "SCORE")
#  ID NAME    SEX  1  2  3
#1  1 MIKE   MALE 70 80 90
#2  2 LUCY FEMALE 65 75 NA

但是,如果OP坚持列名应该是TEST_1TEST_2等,则需要在重塑之前修改TEST列。在这里,使用data.table

代码语言:javascript
复制
library(data.table)
dcast(setDT(X)[, TEST := paste0("TEST_", TEST)], ... ~ TEST, value.var = "SCORE")
#   ID NAME    SEX TEST_1 TEST_2 TEST_3
#1:  1 MIKE   MALE     70     80     90
#2:  2 LUCY FEMALE     65     75     NA

这与data.frame Y所期望的答案是一致的。

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

https://stackoverflow.com/questions/40397290

复制
相关文章

相似问题

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