dplyr:比较变量中依赖于另一个变量的值

时间:2019-02-20 13:18:45

标签: r dplyr choice

如何使用dplyr比较依赖于另一个变量的变量中的值?

df基于调查的选择数据(长格式)。它有一个变量指示参与者 id ,另一个变量指示选择 inst ance,另一个变量指示选择了哪个 alt ative。 在我的数据中,我感觉到很多人往往对这项任务感到无聊,因此在每种情况下都坚持一种选择。因此,我想确定从某个实例开始一直到最后一直选择相同选项的人。

以下是df示例:

set.seed(0)
df <- tibble(
    id = rep(1:5,each=12),
    inst = rep(1:12,5),
    alt = sample(1:3, size =60, replace=T),
)

如下所示:

   id     inst alt
1   1        1   3
2   1        2   1
3   1        3   2
4   1        4   2
5   1        5   3
6   1        6   1
7   1        7   3
8   1        8   3
9   1        9   2
10  1       10   2
11  1       11   1   <-
12  1       12   1   <-
13  2        1   1
14  2        2   3
...

我想创建两个新变量 count count_alt 。新变量 count 应该根据 id inst 指示相同的值在 alt 中出现的频率,仅计算一次 id 末尾的值。因此,对于参与者(id == 1), count 变量应为2,因为在最后两个实例(11和12)中选择了替代项1。 count_alt 的值为1(始终与inst == 12相同)

新的df应该如下所示

 id     inst   alt   count   count_alt
1   1        1   3       2           1
2   1        2   1       2           1
3   1        3   2       2           1
4   1        4   2       2           1
5   1        5   3       2           1
6   1        6   1       2           1
7   1        7   3       2           1
8   1        8   3       2           1
9   1        9   2       2           1
10  1       10   2       2           1
11  1       11   1       2           1
12  1       12   1       2           1     
...

我宁愿使用dplyr而不是循环来解决此问题,因为我希望将其与其他数据处理步骤配合使用。

1 个答案:

答案 0 :(得分:1)

看看是否能解决它:

 const connection = new sql.ConnectionPool({
    server: ServerName,
    driver: "msnodesqlv8",
    options: {
      trustedConnection: true
    }
  });
  connection.connect().then(() => {
    connection.query(
      `select * from xxxtable`,
      (err, result) => {
        if (err) {
          console.log(err);
        } else {	
		console.log(result);
        }
      }
    );
  });

输出:

library(dplyr)

df %>%
  group_by(id) %>%
  mutate(
    count = cumsum(alt != lag(alt, default = "rndm")),
    count = sum(count == max(count)),
    count_alt = alt[n()]
  )