根据条件对行进行计数

时间:2020-08-28 22:07:18

标签: dplyr apply

我正在寻找有关在R中跨列计算“是”的帮助-最好是寻找“整洁”的解决方案。

我有一个数据集df_help,需要创建一个新变量来对对象dim_1进行求值并计算总的匹配数,在df_help_reprex中用{{1 }}。

是否有dplyr解决方案,还是使用dim_1函数作为函数更好的方法?

谢谢!

apply

1 个答案:

答案 0 :(得分:1)

我建议使用const doSignup = pipe( generateMagicLinkToken(email), TE.fromEither, TE.chain(sendSignupEmail(email, redirectUri)) ) return pipe( email, withDb(lookupAccountByEmail), TE.fold( left => left.error === 'account-not-found' ? doSignup : TE.left(left) right => TE.left({error: 'account-exits'}) ), T.map(foldReply<SignupApiResponse>(res)) )() 方法来重塑数据,然后计算匹配值的数量。这里的代码:

tidyverse

接下来是带有library(tidyverse) #Data df_help <- structure(list(symp_ams = c("NO", "NO", "YES", "NO", "NO", "NO", "NO", "NO", "YES", "NO"), symp_nvd = c("YES", "NO", "NO", "NO", "NO", "NO", "NO", "YES", "NO", "NO"), symp_pain = c("NO", "NO", "NO", "NO", "NO", "NO", "NO", "NO", "NO", "NO"), symp_fever = c("NO", "NO", "NO", "NO", "YES", "NO", "YES", "NO", "NO", "YES"), vitals_gcs = c("NO", "NO", "YES", "NO", "YES", "NO", "NO", "NO", "YES", "NO"), vitals_rr_10_24 = c("NO", "NO", "NO", "NO", "NO", "NO", "NO", "NO", "NO", "YES"), vitals_temp_38 = c("NO", "NO", "UNK", "UNK", "YES", "NO", "NO", "NO", "NO", "YES"), vitals_hr_100 = c("YES", "NO", "YES", "YES", "NO", "NO", "NO", "NO", "YES", "YES")), row.names = c(NA, -10L), class = "data.frame") #Vector for match dim_1 <- c("symp_ams","symp_nvd","symp_pain","vitals_gcs") 函数的解决方案。我们通过处理tidyverse重塑数据,照顾每一行。之后,我们检查条件,汇总值,最后将结果绑定到初始数据框:

id

输出:

#Reshape
df_help %>% bind_cols(df_help %>% mutate(id=1:n()) %>%
                        pivot_longer(cols = -id) %>%
                        mutate(Num=ifelse(name %in% dim_1 & value=='YES',1,0)) %>%
                        group_by(id) %>% summarise(Dim1=sum(Num)) %>% select(-id))

仅需提及的是,在最终输出中,第5行应该有错别字,因为 symp_ams symp_nvd symp_pain symp_fever vitals_gcs vitals_rr_10_24 vitals_temp_38 vitals_hr_100 Dim1 1 NO YES NO NO NO NO NO YES 1 2 NO NO NO NO NO NO NO NO 0 3 YES NO NO NO YES NO UNK YES 2 4 NO NO NO NO NO NO UNK YES 0 5 NO NO NO YES YES NO YES NO 1 6 NO NO NO NO NO NO NO NO 0 7 NO NO NO YES NO NO NO NO 0 8 NO YES NO NO NO NO NO NO 1 9 YES NO NO NO YES NO NO YES 2 10 NO NO NO YES NO YES YES YES 0 列定义为vitals_gcs,并且与向量YES相匹配。