[英]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.