【发布时间】:2020-07-22 23:23:56
【问题描述】:
我有一堆以前缀 wtp_ 开头的列,它们出现在一个宽数据帧的中间(在 wtp_ 列之前和之后有几列)。小例子:
df <- tribble(~id, ~complete, ~wtp_20,~wtp_40,~wtp_60,~wtp_80,~wtp_100, ~sex,
1, 1, 0,0,1,1,1, "F",
2, 0, 0,0,0,1,1, "F",
3, 0, 0,0,0,0,1, "M",
4, 1, 1,1,1,1,1, "M",
5, 1, 0,0,0,0,0, "M",
6, 0, 0,1,1,1,1, "F"); df
我在寻找什么:我需要创建一个新变量 (min_wtp),它返回列的名称 第一次其中一个 wtp_ 列从 0 切换到 1. 换句话说,我需要一个解决方案来创建以下内容:
df_needed <- tribble(~id, ~complete, ~wtp_20,~wtp_40,~wtp_60,~wtp_80,~wtp_100, ~sex, ~min_wtp,
1, 1, 0,0,1,1,1, "F", "wtp_60",
2, 0, 0,0,0,1,1, "F", "wtp_80",
3, 0, 0,0,0,0,1, "M", "wtp_100",
4, 1, 1,1,1,1,1, "M", "wtp_20",
5, 1, 0,0,0,0,0, "M", "NA",
6, 0, 0,1,1,1,1, "F", "wtp_40"); df_needed
请注意以下并发症:
-有些人(比如 id==5)永远不会变成 1,而其他人(比如 id==4)一直都是 1。
- 在 wtp_ 列之前出现了一些不相关的列,其中包含 0 和 1,在构造 min_wtp 时应忽略这些列。
- 列(包括wtp_ 列)比我上面包含的最小示例要多。
我尝试将which 和colnames 函数与select(starts_with("wtp_")) 结合使用,但没有成功。
如果有人有 dplyr 解决方案,那将是首选。
【问题讨论】: