【问题标题】:New R user unstacking data [duplicate]新的 R 用户取消堆叠数据 [重复]
【发布时间】:2017-05-13 18:04:25
【问题描述】:

每个 memberID 我的数据有多行。我在下面模拟了它(请参阅#this is what I have)。我需要将其转换为每个 memberID 有一行的形状,创建多列。我也在下面模拟了所需的输出(请参阅#this is what I want)。我正在寻找在 R 中进行这种转换的最简单方法。我是一个全新的 R 和 RStudio 用户,几乎没有编码背景。非常感谢您提供代码方面的帮助。

#this is what I have

ID <- c(1,1,2,3,3,3)  
Date <- as.Date (c("2015/01/01","2016/01/03", "2011/03/01", "2015/01/09", "2017/12/11","2016/09/09" )) 
Score <- c(5,15,2,6,12,18)  
df <- data.frame(ID, Date, Score)
df

#this is what i want

ID2 <- c(1,2,3)  
Date1 <- as.Date (c("2015/01/01","2011/03/01","2015/01/09"))
Date2 <- as.Date (c("2016/01/03", NA, "2017/12/11"))
Date3 <- as.Date (c(NA, NA,"2016/09/09"))
Score1 <- c(5,2,6)
Score2 <- c(15,NA,12) 
Score3 <- c("NA","NA",18) 
df2 <- data.frame (ID2, Date1, Date2, Date3, Score1, Score2, Score3)
df2

【问题讨论】:

    标签: r rstudio


    【解决方案1】:

    我们可以使用data.table中的dcast,它可以使用多个value.var

    library(data.table)
    dcast(setDT(df), ID~rowid(ID), value.var = c("Date", "Score"), sep="")
    #   ID      Date1      Date2      Date3 Score1 Score2 Score3
    #1:  1 2015-01-01 2016-01-03       <NA>      5     15     NA
    #2:  2 2011-03-01       <NA>       <NA>      2     NA     NA
    #3:  3 2015-01-09 2017-12-11 2016-09-09      6     12     18
    

    【讨论】:

    • 谢谢!起初它给出了错误,但我重新启动了 R 并且相同的代码工作了!
    猜你喜欢
    • 2023-01-11
    • 2021-12-05
    • 1970-01-01
    • 2019-04-11
    • 2020-11-12
    • 1970-01-01
    • 2020-11-25
    • 2016-08-23
    • 1970-01-01
    相关资源
    最近更新 更多