【发布时间】:2019-07-11 22:45:49
【问题描述】:
我的 R 水平一般,希望对以下操作有所帮助。
假设我有以下数据框:
>df
ID Label
P1 M
P1 S
P2 M
P2 M
P2 S
P3 M
P3 S
P3 M
P4 S
P4 M
P5 M
P5 M
P5 S
我希望能够针对每个 ID 选择出现在变量 Label 的特定序列中的行。
对于模式"MS",预期输出为
ID Label
P1 M
P1 S
P2 M
P2 S
P3 M
P3 S
对于模式"MMS",预期的输出将是
ID Label
P2 M
P2 M
P2 S
P5 M
P5 M
P5 S
对于模式"SM",预期输出为:
ID Label
P3 S
P3 M
P4 S
P4 M
请考虑这样一个事实,即我正在处理的数据有很多行,并且我需要构建的解决方案需要适用于任意长度的模式。 (例如“MSS”、“SM”、“MMSSMS”等)。我虚心地请求您的帮助。
编辑:我已经更新了这个问题(示例数据框和模式"MMS" 的输出示例。我想补充一点,我希望在使用ID 变量对数据进行分组后进行模式匹配,这样模式就可以在ID分组的数据组中找到。抱歉第一次没有搞清楚。
最终编辑:@akrun、@boski 和 @tmfmnk 的回答对我有用。与@tmfmnk 的解决方案(在 40 万行数据上约 29 秒)相比,@boski 和@akrun 的解决方案在执行时间上更快(在 40 万行数据上约 2-10 秒)。我建议读者参考所有这三个解决方案。
【问题讨论】: