R:如何计算列中用逗号分隔的所有字符值?

Posted

技术标签:

【中文标题】R:如何计算列中用逗号分隔的所有字符值?【英文标题】:R: How to Count All Character Values Separated By Commas In A Column? 【发布时间】:2019-12-12 06:30:45 【问题描述】:

下面是我正在使用的几行测试数据。我想计算频率 ICD10Code 列中由列分隔的所有字符。从片段 下面的代码,我使用 group_by 因为每个“PatientId”值在该列中都有重复但有 其他列中的唯一值。如何计算所有字符值的频率?

PatientId ReferralSource     NextAppt   Age InsuranceName            ICD10Code
1584      St Francis         Y       34 SLIDING FEE SCHEDULE     M5136, N809, R51, Z6831  
2655      Piedmont Hospital  Y       60 Medicaid-GA (Medicaid)   E119, E782, I10, L729, R809

结果如下所示。

M5136=1
N809=1
R51=1

作为 R 的新手,我尝试了 Stack (sapply) 中的这段代码并生成了一个 每行特定行的总数。

data.id <- data.1 %>% group_by(PatientId) %>%  
      summarise(ReferralSource=first(ReferralSource),NextAppt=first(NextAppt),
      Age=max(Age),InsuranceName=toString(unique(InsuranceName)),
      ICD10Code=toString(unique(ICD10Code)))
sapply(strsplit(data.id$ICD10Code,","),FUN=function(x)length(x[x!="Null"]))

这产生了每一行的总数。

 [1] 10 17  5 18  6  5  8  7  2  8  3  8 10 14  5  5  9  8 11  5  6  5  9 16  9  4  3  9 18  9 12 
  12 12  2 16  6 10
   [38]  2  2  3  4  9  7 12  5 10 16 13  9  1  6  2  7  9  8  5  5  4  3 11 19  6  4  3  7  8  6 
  10  8  6 16 11  5  9
   [75] 13  5  8  4 10  3  7  5  6  4  3  4  8  7  7  4  5  9  2  6  1 20  3  3  3  4  5  5  7  3 
  12  7 16  1  7  6  3
  [112]  4  2  7  8  4  1  9  3  8  3  8  5  8  2  4  4  8  4  7 10  8  2  4  4  2  9  7  7  5  1  
  8  6 10  9  3 11 10
  [149]  3  6  4  6 13  3  7 11  6  5  4  3  1  4 10 10 10 10 11  2  1  5  4  5  5  5  5  9  5  7  
  7  2 6  7  7  6  5
 [186]  7  8  9     

【问题讨论】:

您想计算每一行的唯一ICD10Code 数量,即PatientId 吗? 不,只是 ICDCode10 的整个列。 这行得通吗? table(unlist(strsplit(data.1$ICD10Code, ','))) ? @RonakShah 当我使用它时,我收到此错误消息:strsplit(data.1$ICD10Code, ",") 中的错误:非字符参数 试试table(unlist(strsplit(as.character(data.1$ICD10Code), ','))) 【参考方案1】:

要统计ICD10Code在整列中出现的频率,我们可以用逗号分割字符串unlist,用table统计。

table(unlist(strsplit(as.character(data.1$ICD10Code), ',')))

【讨论】:

【参考方案2】:

一种选择是在“ICD10Code”列上使用separate_rows(假设它为character 类),将其与“PatientID”一起用作分组变量并在@987654324 中获取计数(n()) @ 以及输出中所需的其他变量,如 OP 的帖子中所示

library(dplyr)
library(tidyr)
data.1 %>%
      separate_rows(ICD10Code) %>%
      group_by(PatientID, ICD10Code) %>%
      summarise(Count = n(), 
                ReferralSource=first(ReferralSource),
                NextAppt=first(NextAppt),       
                Age=max(Age),
                InsuranceName=toString(unique(InsuranceName)))

如果其他摘要输出应仅基于“PatientID”分组,请使用“Count”而不是“ICD10Code”作为分组变量


如果我们只想从“ICD10Code”中对每个“PatientID”进行计数,那么只需在separate_rows 之后执行count

data.1 %>%
     select(PatientID, ICD10Code) %>%
     separate_rows(ICD10Code) %>%
     count(PatientID, ICD10Code)

【讨论】:

以上是关于R:如何计算列中用逗号分隔的所有字符值?的主要内容,如果未能解决你的问题,请参考以下文章

如何从文本文件中用逗号分隔行中的特定行和值

如何在vue js中用逗号分隔的字符串中发布子类别?

用 .csv 文件中的 VBA 仅在 3 列中用分号替换逗号

条目中用逗号分隔的循环子字符串

在mysql中用逗号分隔值连接三个表

在变量 BASH 的一行中用逗号分隔值