基于R语言dplyr按pID分组生成block并统计唯一字母数
解决方案
首先加载所需工具包:
library(dplyr) library(stringr)
步骤1:清理数据中的空格干扰
原始数据里的pID和condition存在前后空格,会影响分组和条件判断,先统一清理:
df_clean <- df1 %>% mutate( pID = str_trim(pID), condition = str_trim(condition) )
步骤2:生成block和Nletters_block列
按要求分组计算,用dplyr实现:
result <- df_clean %>% # 按pID分组标记block编号 group_by(pID) %>% mutate(block = cumsum(condition == "false")) %>% # 按pID+block分组统计唯一字母数量 group_by(pID, block) %>% mutate( Nletters_block = str_c(material, collapse = "") %>% str_split("") %>% unlist() %>% unique() %>% length() ) %>% ungroup()
结果说明
运行后得到的result数据框完全符合预期:
block列从每个pID的第一个"false"行开始标记为1,后续每遇到新的"false"行就自动递增编号Nletters_block列统计了对应pID+block组合下,所有material字符串包含的唯一字母总数
内容的提问来源于stack exchange,提问作者dede
相关产品推荐
相关产品推荐

