簡體   English   中英

sapply 函數似乎不適用於 df

[英]sapply function does not seem to work with df

這是我擁有的一個非常復雜的數據集的一個簡單示例:

  record_id <-  c(1:10),
  date      <- as.Date(c("2018-09-01", "2018-12-01", "2019-03-01", "2019-06-01",
                 "2019-09-01", "2019-12-01", "2020-03-01", "2020-06-01",
                 "2018-11-30","2019-02-28"))
  
  ds <- cbind.data.frame(record_id, date)

這是我用來創建另一個變量的函數:

arms_and_events_function <- function(d)
    {
        df <- data.frame(arm   = rep(1:3, each = 4), 
                         event = rep(1:4, 3),
                         start = as.Date(c("2017-09-01", "2017-12-01", "2018-03-01", 
                                           "2018-06-01", "2018-09-01", "2018-12-01", 
                                           "2019-03-01", "2019-06-01", "2019-09-01", 
                                           "2019-12-01", "2020-03-01", "2020-06-01")),
                          stop  = as.Date(c("2017-11-30",  NA,          "2018-05-31", 
                                          "2018-08-31", "2018-11-30", "2019-02-28", 
                                          "2019-05-31", "2019-08-31", "2019-11-30", 
                                          "2020-02-29", "2020-05-31", "2020-08-31")))
    
    matches <-  sapply(d, function(x) which(x >= df$start & x<= df$stop))
    paste0("arm", df$arm[matches], "_event", df$event[matches])
  }

  ds <- ds %>%
    dplyr::mutate(
      arms_and_events = NA,
      arms_and_events = as.Date(arms_and_events),
      arms_and_events = arms_and_events_function(date)
    )

當我這樣做時,我收到此錯誤:

df$arm[matches] 中的錯誤:無效的下標類型“列表”

你能幫我嗎?

  • 您不需要使用NA初始化列。

  • 傳遞在arms_and_events_function中有日期的列。

ds <- ds %>% dplyr::mutate(arms_and_events = arms_and_events_function(date))
ds

#   record_id       date arms_and_events
#1          1 2018-09-01     arm2_event1
#2          2 2018-12-01     arm2_event2
#3          3 2019-03-01     arm2_event3
#4          4 2019-06-01     arm2_event4
#5          5 2019-09-01     arm3_event1
#6          6 2019-12-01     arm3_event2
#7          7 2020-03-01     arm3_event3
#8          8 2020-06-01     arm3_event4
#9          9 2018-11-30     arm2_event1
#10        10 2019-02-28     arm2_event2

為了處理缺失值,我們可以將函數更改為:

arms_and_events_function <- function(d)
{
  sapply(d, function(x) if(is.na(x)) NA else {
    inds <- which(x >= df$start & x<= df$stop)
    paste0("arm", df$arm[inds], "_event", df$event[inds])
  })
}

暫無
暫無

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

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