我有一个中等规模的数据集(>2000万次观测(,我想使用一个闪亮的应用程序来过滤数据集中特定亚组的所需信息。
现在,我想为每个观测分配一个子群编号(1=子群1,2=子群2,依此类推(。然而,在确定所需的子组并通过闪亮的应用程序界面提交之前,子组的总数是未知的。
因此,我创建了一个全局变量,在提交信息后存储子组的数量。有了这些信息,我想将for循环和ifelse函数结合起来,在数据集中创建一列,存储每个观测的相应子组。
想象一下以下示例数据的情况:总体而言,数据集包含三列。第一列包含每个观察的唯一id。第二列的标题是";保险;并包含保险公司的名称。第三列的标题是";response_ code";并且包含介于1和5之间的数字(作为字符串(。本专栏告诉我们观察如何评价其对保险公司的满意度。
例如,数据集可能如下所示:
ID | 保险 | 响应代码 |
---|---|---|
1 | Insurance_Company_1 | "1〃|
2 | Insurance_Company_2 | "2〃|
3 | Insurance_Company_4 | "3〃|
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
可能有更好或更干净的解决方案,但我对我的方法的性能非常满意。