R:如何计算一列中以逗号分隔的所有字符值?
R: How to Count All Character Values Separated By Commas In A Column?
下面是我正在使用的一些测试数据的几行。我想计算频率
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' 列上使用 separate_rows
(假设它是 character
class),将其与 [=27 一起用作分组变量=] 并获取 summarise
中的计数 (n()
) 以及输出中所需的其他变量,如 OP 的 post
所示
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)
要统计ICD10Code
在整列中出现的频率,我们可以将字符串以逗号拆分,unlist
再用table
统计。
table(unlist(strsplit(as.character(data.1$ICD10Code), ',')))
下面是我正在使用的一些测试数据的几行。我想计算频率 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' 列上使用 separate_rows
(假设它是 character
class),将其与 [=27 一起用作分组变量=] 并获取 summarise
中的计数 (n()
) 以及输出中所需的其他变量,如 OP 的 post
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)
要统计ICD10Code
在整列中出现的频率,我们可以将字符串以逗号拆分,unlist
再用table
统计。
table(unlist(strsplit(as.character(data.1$ICD10Code), ',')))