mutate(cancer_allcanc = case_when( !is.na(cancer_type_total) & cancer_time_total < "2020-12-31" ~ 1, TRUE ~ 0),
时间: 2024-04-24 09:22:10 浏览: 141
这是一段 R 语言的代码,它的功能是给一个数据集中的变量 cancer_allcanc 赋值,这个变量的值取决于数据集中的两个其他变量 cancer_type_total 和 cancer_time_total 的取值。如果 cancer_type_total 不是缺失值,且 cancer_time_total 小于 "2020-12-31",则 cancer_allcanc 被赋值为 1,否则被赋值为 0。这段代码使用了 case_when 函数,它类似于 switch 语句,根据条件的不同来选择不同的赋值操作。
相关问题
lung_time = case_when( cancer_lung == 1 ~ as.character(cancer_time_total), cancer_lung == 0 ~ as.character(dead))) %>% mutate(lung_time = replace_na(lung_time, "2020-12-31")) %>% as_tibble() %>% mutate(lung_time = as.Date(lung_time), lung_time = ymd(lung_time)) %>% mutate(lung_time = case_when( lung_time > "2020-12-31" ~ "2020-12-31", TRUE ~ as.character(lung_time))) %>% mutate(lung_time = as.Date(lung_time), lung_time = ymd(lung_time)) %>%
这是一个 R 语言中的代码片段,它首先根据肺癌的状态(cancer_lung)来确定肺癌患者的存活时间(cancer_time_total)或死亡时间(dead),然后将其转换为字符型变量并用 "2020-12-31" 替换缺失值。接下来,将字符型变量转换为日期型变量,并将其限制在 "2020-12-31" 之前的时间范围内。最后,将日期型变量再次转换为字符型变量并存储在变量 lung_time 中。
帮我优化这段代码map_dfr(files,~read_excel(.x) %>% mutate(lab=.x))%>%mutate( 长度1=as.numeric(长度1),长度2=as.numeric(长度2),长度3=as.numeric(长度3), 长度4=as.numeric(长度4),长度5=as.numeric(长度5),长度6=as.numeric(长度6))%>% mutate(长度1=case_when(is.na(长度1)~0, TRUE~长度1),长度2=case_when(is.na(长度2)~0, TRUE~长度2),长度3=case_when(is.na(长度3)~0, TRUE~长度3), 长度4=case_when(is.na(长度4)~0, TRUE~长度4),长度5=case_when(is.na(长度5)~0, TRUE~长度5),长度6=case_when(is.na(长度6)~0, TRUE~长度6))%>% mutate(total=长度1+长度2+长度3+长度4+长度5+长度6)%>% mutate(result=case_when(total < 100~ "<100", total >=100&total<200 ~"100~200", total>=200&total<300~"200~300", total>=300&total<400~"300~400", total>=400&total<500~"400~500", total>=500&total<1000~"500~1000", total>=1000&total<5000~"1000~5000")) %>% count(result) %>% write.csv(.,"室内长度.csv")
这段代码有一些可以优化的地方,可以尝试以下几个方面进行优化:
1. 使用lapply代替map_dfr
2. 使用summarize代替mutate + count
3. 使用cut代替case_when
优化后的代码如下:
```
library(readxl)
library(dplyr)
files <- list.files(pattern = ".xlsx")
df_list <- lapply(files, function(x) {
read_excel(x) %>%
mutate(lab = x) %>%
mutate_at(vars(starts_with("长度")), ~ifelse(is.na(.), 0, as.numeric(.)))
})
df <- bind_rows(df_list)
df %>%
mutate(total = rowSums(select(., starts_with("长度")))) %>%
summarize(n = n(),
result = cut(total, breaks = c(-Inf, 100, 200, 300, 400, 500, 1000, 5000),
labels = c("<100", "100~200", "200~300", "300~400", "400~500", "500~1000", "1000~5000"))) %>%
group_by(result) %>%
summarize(count = n()) %>%
write.csv("室内长度.csv", row.names = FALSE)
```
这样做的好处是:
1. 使用lapply可以避免重复调用map_dfr造成的性能损失
2. 使用summarize代替mutate + count可以简化代码并提升性能
3. 使用cut可以简化case_when语句,并且更加灵活。同时我们还使用了group_by和summarize来完成数据的汇总,避免了使用count造成的性能损失。
阅读全文