首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在数据帧从长格式转换为宽格式后,日期变量被错误地转换为数值变量

在数据帧从长格式转换为宽格式后,日期变量被错误地转换为数值变量
EN

Stack Overflow用户
提问于 2018-05-09 12:36:33
回答 2查看 346关注 0票数 3

我正在使用一个数据框架,该数据框架由参与者跨越多个时间点的数据组成。我正在尝试将数据帧从长格式转换为宽格式。数据框架由属于不同数据类型(如日期和数字)的变量组成。

代码语言:javascript
运行
复制
library(data.table)

SN <- c("AAA", "BBB", "BBB", "CCC", "DDD", "EEE", "DDD")
Timepoint <- c(1, 1, 2, 1, 1, 1, 2)
date <- c("31-Mar-17", "08-Mar-17", "31-Mar-18", "28-Mar-18", "17-Mar-17", "26-Feb-18", "07-Apr-18")
score <- c(13, 16, 17, 9, 14, 15, 15)
age <- c(12, 15, 16, 9, 14, 14, 15)
df <- data.frame(SN, Timepoint, date, score, age)
df$date <- as.Date(df$date, format = "%d-%B-%y")

我使用以下代码将数据从长格式转换为宽格式:

代码语言:javascript
运行
复制
df2 <- dcast(melt(df, id.vars = c("SN", "Timepoint")),
         SN ~ Timepoint + variable, value.var = "value")

当R将所有变量解释为属于公共类型(数值)时,日期变量被错误地转换为数值变量。

以下是我获得的不正确的输出:

我所要达到的正确结果如下:

谢谢!非常感谢你的帮助!

EN

Stack Overflow用户

发布于 2018-05-09 13:06:18

另一种方法是将日期变量转换为数据重组后的日期,而不是以前。dplyr包便于根据名称更改所有列,例如以日期结尾的列。

代码语言:javascript
运行
复制
library(data.table)
library(dplyr)

SN <- c("AAA", "BBB", "BBB", "CCC", "DDD", "EEE", "DDD")
Timepoint <- c(1, 1, 2, 1, 1, 1, 2)
date <- c("31-Mar-17", "08-Mar-17", "31-Mar-18", "28-Mar-18", "17-Mar-17", "26-Feb-18", "07-Apr-18")
score <- c(13, 16, 17, 9, 14, 15, 15)
age <- c(12, 15, 16, 9, 14, 14, 15)
df <- data.frame(SN, Timepoint, date, score, age)
df2 <- dcast(melt(df, id.vars = c("SN", "Timepoint")),
             SN ~ Timepoint + variable, value.var = "value") %>% 
  mutate_at(vars(ends_with("date")), as.Date, format = "%d-%B-%y")
票数 2
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50253616

复制
相关文章

相似问题

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