如何使用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而不是循环来解决此问题,因为我希望将其与其他数据处理步骤配合使用。
答案 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()]
)