总结 R 中包含字符串变量的特定行数(赞赏 dplyr/tidyverse 代码)



我有一个大数据集,其中包含有关感染并发症的各种变量。有列,包含相应列中以字符串形式写的症状("排尿困难","发烧"等(。我想知道每个观察结果中阳性症状的数量。我尝试编写不同的代码,在mutate_at中使用rowSumsis.character!is.na,试图做得更简单,短至一行代码,但没有奏效。 例:

symps_na %>% 
mutate_if(~any(is.character(.), rowSums)) %>% 
View()

然后,我分别为每列编写了一个代码,尝试将字符串变量重新编码为 1,将它们转换为数字,然后将这些变量相加以得到症状的数量(请参阅下面的代码(。

symps_na<-
pb_table_ord %>%
select(ID, dysuria:fever)%>% 
mutate(dysuria=ifelse(dysuria=="Dysuria", 1, dysuria)) %>% 
mutate(frequency=ifelse(frequency=="Frequency", 1, frequency)) %>% 
mutate(urgency=ifelse(urgency=="Urgency", 1, urgency)) %>% 
mutate(prostatepain=ifelse(prostatepain=="Prostate pain", 1, prostatepain)) %>% 
mutate(rigor=ifelse(!is.na(rigor), 1, rigor)) %>% 
mutate(loinpain=ifelse(!is.na(loinpain), 1, loinpain)) %>% 
mutate(fever=ifelse(!is.na(fever), 1, fever)) %>% 
mutate_at(vars(dysuria:fever), as.numeric) %>% 
mutate(symptoms.sum=rowSums(select(., dysuria:fever)))

症状.sum列返回的是 NA 而不是数字。 哦,对不起,刚刚意识到我错过了na.rm=TRUE!但无论如何。谁能建议一种更优雅的方法,如何在单独的列中获取每个观察的非 NA/字符串变量的摘要数?

您可以创建两组列,一组需要检查与列名相同的值,另一组需要检查NA值。我创建了一个在答案末尾共享的示例数据,两个向量cols1这是列名称的向量,其值与其列和cols2中的值相同,我们需要检查NA值。您可以根据您拥有的列名称进行更改。

library(dplyr)
cols1 <- c('b', 'c')
cols2 <- c('d')
purrr::imap_dfc(df %>% select(cols1), `==`) %>% mutate_all(as.numeric) %>%
bind_cols(df %>% transmute_at(vars(cols2), ~+(!is.na(.)))) %>%
mutate(symptoms.sum = rowSums(select(., b:d), na.rm = TRUE))
# A tibble: 5 x 4
#      b     c     d symptoms.sum
#  <dbl> <dbl> <int>        <dbl>
#1     1     1     0            2
#2     0     1     1            2
#3     1     0     1            2
#4    NA    NA     1            1
#5     1    NA     0            1

数据

在此数据上进行了测试,如下所示

df <- structure(list(a = 1:5, b = structure(c(1L, 2L, 1L, NA, 1L), .Label = c("b", 
"c"), class = "factor"), c = structure(c(1L, 1L, 2L, NA, NA), .Label = c("c", 
"d"), class = "factor"), d = c(NA, 1, 2, 4, NA)), class = "data.frame", 
row.names = c(NA, -5L))
df
#  a    b    c  d
#1 1    b    c NA
#2 2    c    c  1
#3 3    b    d  2
#4 4 <NA> <NA>  4
#5 5    b <NA> NA

最新更新