r-用mutate、for循环和ifelse确定子群



我有一个中等规模的数据集(>2000万次观测(,我想使用一个闪亮的应用程序来过滤数据集中特定亚组的所需信息。

现在,我想为每个观测分配一个子群编号(1=子群1,2=子群2,依此类推(。然而,在确定所需的子组并通过闪亮的应用程序界面提交之前,子组的总数是未知的。

因此,我创建了一个全局变量,在提交信息后存储子组的数量。有了这些信息,我想将for循环和ifelse函数结合起来,在数据集中创建一列,存储每个观测的相应子组。

想象一下以下示例数据的情况:总体而言,数据集包含三列。第一列包含每个观察的唯一id。第二列的标题是";保险;并包含保险公司的名称。第三列的标题是";response_ code";并且包含介于1和5之间的数字(作为字符串(。本专栏告诉我们观察如何评价其对保险公司的满意度。

例如,数据集可能如下所示:

"1〃"2〃"3〃
ID 保险 响应代码
1 Insurance_Company_1
2 Insurance_Company_2
3 Insurance_Company_4
4 保险_公司_3 "1〃
5 保险_公司_6 "2〃
6 保险公司_ 2 "4〃
7 保险_公司_1 "5〃
8 保险_公司_4 "1〃

对于所有仍然对解决方案感兴趣的人,我使用了以下方法:

df$subgroup_number <- 0
subgroup_number_list <- vector(mode = "list", length = number_of_subgroups)
for(i in 1:number_of_subgroups) {
subgroup_number_list[[i]] = ifelse(
df$insurance %in% eval(parse(text = paste0("labels_subgroup_", i))) &
df$response_code %in% eval(parse(text = paste0("response_codes_subgroup_", i))), 
i, 0)
}
subgroup_number_df <- mapply(c, subgroup_number_list)
subgroup_number_vec <- rowSums(subgroup_number_df )
df$subgroup_number <- subgroup_number_vec

可能有更好或更干净的解决方案,但我对我的方法的性能非常满意。

最新更新