【问题标题】:Why is dcast giving 1 and 0? [duplicate]为什么 dcast 给出 1 和 0? [复制]
【发布时间】:2020-06-08 08:07:32
【问题描述】:

我有以下数据框

FileNumber<-c("510708396","510708396","510708396","510708485","510667325")
EventCode<-c("CASCRT","DISCSENT","DISCSENT","CASCRT","DISCSENT")
EventDate<-c("8/21/2018 12:00:00 AM","12/3/2018 2:41:18 PM","12/3/2018 3:50:16 PM","8/23/2018 12:00:00 AM","12/12/2018 9:11:28 AM")

df<-data.frame(FileNumber,EventCode,EventDate)
  FileNumber EventCode             EventDate
1  510708396    CASCRT 8/21/2018 12:00:00 AM
2  510708396  DISCSENT  12/3/2018 2:41:18 PM
3  510708396  DISCSENT  12/3/2018 3:50:16 PM
4  510708485    CASCRT 8/23/2018 12:00:00 AM
5  510667325  DISCSENT 12/12/2018 9:11:28 AM

我想将这个长格式数据框更改为宽格式数据,并使用 EventCodes CASRTDISCSENT 作为列名。我尝试了以下

library(reshape2)
dcast(df,FileNumber~EventCode,value.var = "EventDate")

但是我收到以下消息和一条消息,即 “缺少聚合函数:默认为长度”,正如我所期望的 EventDate 值。

  FileNumber CASCRT DISCSENT
1  510667325      0        1
2  510708396      1        2
3  510708485      1        0

我猜这与FileNumber 中的非唯一值有关我如何确保获得事件日期值而不是 1 和 0。

【问题讨论】:

  • 表示有重复,可以找subset(df, FileNumber == 510667325 &amp; EventCode == 'DISCSENT')

标签: r reshape2 dcast


【解决方案1】:

您收到此错误是因为有 多个 行具有相同 EventNumberEventCode。在尝试将数据转换为宽格式时,reshape 不知道如何处理多个值并使用其备用解决方案 lenght(即计算此单元格中有多少元素)

您需要决定在每个单元格有多个值的情况下要如何进行。

您可以将EventDate 列转换为日期时间格式,以便计算平均值。或者只使用maxmin

如果您想将每个日期保留在列表中,我强烈建议您使用 tidyr s pivot_wider 函数:

FileNumber<-c("510708396","510708396","510708396","510708485","510667325")
EventCode<-c("CASCRT","DISCSENT","DISCSENT","CASCRT","DISCSENT")
EventDate<-c("8/21/2018 12:00:00 AM","12/3/2018 2:41:18 PM","12/3/2018 3:50:16 PM","8/23/2018 12:00:00 AM","12/12/2018 9:11:28 AM")

df<-data.frame(FileNumber,EventCode,EventDate)

library(dplyr)
library(tidyr)

df2 <- df %>%
  pivot_wider(names_from = EventCode,
              values_from = EventDate)

这会引发警告,但会将多个元素放在一个列表中:

df2 现在是:

# A tibble: 3 x 3
  FileNumber      CASCRT    DISCSENT
  <fct>      <list<fct>> <list<fct>>
1 510708396          [1]         [2]
2 510708485          [1]         [0]
3 510667325          [0]         [1]

我们可以访问列表中的元素:

df2$DISCSENT[1]

返回:

list_of<factor<b7763>>[1]>
[[1]]
[1] 12/3/2018 2:41:18 PM 12/3/2018 3:50:16 PM
5 Levels: 12/12/2018 9:11:28 AM ... 8/23/2018 12:00:00 AM

【讨论】:

    猜你喜欢
    • 2014-11-11
    • 2013-10-04
    • 1970-01-01
    • 1970-01-01
    • 2023-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多