【问题标题】:'Min' not meaningful for factors in encounter history data, R Studio'Min' 对于遭遇历史数据中的因素没有意义,R Studio
【发布时间】:2017-07-15 20:31:17
【问题描述】:

我有一个相当简单的动物遭遇历史数据集

Encounter history data - Shows each date data was collected and every animal that was seen during each encounter

我正在尝试运行一个函数,该函数将使用 tapply 代码提取每只动物的最早出现日期;

disco1<-tapply(dataSc$Date,dataSc$Final.ID,min) 

但是,它给了我以下错误;

Summary.factor(c(62L, 72L, 2L, 63L, 33L, 59L, 78L, 39L), na.rm = FALSE) 中的错误: ‘min’ 对因子没有意义

我不确定为什么它不起作用,因为我的主管对类似的数据集使用了相同的代码。任何帮助都会很棒:)

这是我的数据框:

df <- structure(list(Year = c(2009L, 2009L, 2011L, 2011L, 2011L, 2011L
), Date = structure(c(48L, 4L, 60L, 64L, 16L, 22L), .Label = c("01/06/2012", 
"01/08/2011", "02/01/2014", "02/03/2009", "03/03/2009", "03/06/2015", 
"03/09/2011", "04/03/2015", "04/04/2015", "04/07/2012", "04/08/2012", 
"04/08/2015", "05/03/2009", "05/07/2011", "05/08/2015", "06/07/2011", 
"06/08/2015", "07/02/2013", "07/03/2013", "07/04/2015", "07/06/2015", 
"07/07/2011", "08/06/2009", "08/06/2015", "08/07/2012", "08/08/2012", 
"09/07/2015", "09/08/2011", "10/07/2011", "10/07/2013", "10/07/2015", 
"10/08/2015", "11/07/2012", "11/08/2011", "11/08/2012", "12/03/2014", 
"12/03/2015", "12/06/2015", "13/06/2013", "13/07/2012", "14/07/2015", 
"14/08/2012", "15/08/2011", "16/02/2009", "17/07/2011", "17/07/2012", 
"17/08/2011", "18/02/2009", "18/07/2011", "18/08/2011", "19/07/2011", 
"19/08/2011", "19/08/2015", "20/06/2011", "20/06/2015", "20/07/2012", 
"21/02/2009", "21/06/2011", "21/08/2012", "22/06/2011", "23/08/2012", 
"24/07/2011", "24/08/2011", "26/06/2011", "26/07/2011", "26/08/2011", 
"26/08/2012", "27/07/2015", "28/03/2015", "28/07/2011", "28/08/2012", 
"29/03/2015", "29/07/2011", "29/08/2011", "30/04/2015", "30/07/2012", 
"30/08/2011", "30/08/2012", "31/01/2013", "31/08/2011"), class = "factor"), 
    Final.ID = structure(c(22L, 12L, 12L, 28L, 12L, 17L), .Label = c("SWT1", 
    "SWT11", "SWT13", "SWT14", "SWT15", "SWT16", "SWT17", "SWT19", 
    "SWT2", "SWT21", "SWT22", "SWT23", "SWT24", "SWT27", "SWT28", 
    "SWT29", "SWT3", "SWT30", "SWT32", "SWT37", "SWT38", "SWT45", 
    "SWT46", "SWT47", "SWT48", "SWT49", "SWT5", "SWT50", "SWT51", 
    "SWT52", "SWT56", "SWT58", "SWT6", "SWT61", "SWT62", "SWT65", 
    "SWT7", "SWT73", "SWT8", "SWT9", "T-014", "T001", "T002", 
    "T003", "T004", "T005", "T005CC", "T006", "T006C", "T009", 
    "T010", "T010C", "T010CC", "T011", "T012", "T013", "T014", 
    "T015", "T015CC", "T016", "T018", "T018C", "T018CC", "T018CCC", 
    "T019", "T019C", "T019CC", "T020", "T021", "T021C", "T021CC", 
    "T021CCC", "T022", "T022C", "T022CC", "T023", "T024", "T025", 
    "T027", "T029", "T034", "T041", "T041C", "T042", "T043", 
    "T044", "T044C", "T045", "T045C", "T046", "T046C", "T047", 
    "T047C", "T048", "T049", "T050", "T051", "T052", "T053", 
    "T053C", "T054", "T056", "T056C", "T057", "T058", "T059", 
    "T060", "T060C", "T061", "T063", "T065", "T065C", "T068", 
    "T070", "T071", "T072", "T073", "T074", "T079", "T082", "T084", 
    "T086", "T087", "T087C", "T089", "T091", "T091C", "T094", 
    "T095", "T096", "T097", "T097CC", "T098", "T099", "T100", 
    "T101", "T101C", "T102", "T102C", "T103", "T104", "T113", 
    "T115", "T117", "T118", "T118C", "T123", "T124", "T124C", 
    "T125", "T126", "T127", "T128", "T129", "T130", "T131", "T132", 
    "T133", "T133C", "T134", "T135", "T136", "T137", "T138", 
    "T139", "U011"), class = "factor"), Data = structure(c(1L, 
    1L, 1L, 1L, 1L, 1L), .Label = c("Acoustic", "Photo"), class = "factor")), .Names = c("Year", 
"Date", "Final.ID", "Data"), row.names = c(NA, 6L), class = "data.frame")

【问题讨论】:

  • 怀疑你的日期是一个字符向量而不是日期。如果您包含一些数据(使用dput(head(dataSC))),它会更容易提供帮助。
  • 我也是这么想的,但我不知道如何让它识别日期。我已经添加了上面 dput(head(dataSC) 的结果
  • 尝试as.Date(dataSc$Date, format = "%d/%m/%Y")lubridate::dmy(dataSc$Date) 约会
  • 日期代码有效,但 tapply 仍然返回相同的错误:(
  • 您记得将日期分配回 data.frame 吗? dataSc$Date &lt;- as.Date(...

标签: r tapply


【解决方案1】:

Min 不起作用,因为 Date 列是一个因素,首先您需要转换为 Date 然后点击:

df$Date <- as.Date(as.character(df$Date), tryFormats =  "%d/%m/%Y")
dates<-as.Date(tapply(df$Date, df$Final.ID, min), origin="1970-01-01")
dates[!is.na(dates)]
#>        SWT23         SWT3        SWT45        SWT50 
#> "2009-03-02" "2011-07-07" "2009-02-18" "2011-06-26" 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-08-05
    • 1970-01-01
    • 2014-07-06
    • 2015-08-12
    • 1970-01-01
    • 1970-01-01
    • 2017-01-19
    • 1970-01-01
    相关资源
    最近更新 更多