簡體   English   中英

R reshape2 dcast:轉換數據

[英]R reshape2 dcast: transform data

我如何像這樣將數據X轉換為Y

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,NAME和性別在上面的例子中的數據的其他列。

假設ID列中的所有其他列都是一致的,例如Mike只能是ID為1的男性,我們該怎么做?

根據文檔( ?reshape2::dcast ), dcast()在公式中允許...

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

都支持dcast()reshape2data.table包均是如此。

因此,您可以編寫:

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

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給出的預期答案是一致的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM