gpt4 book ai didi

r - 根据 R 中的先前单元格删除行

转载 作者:行者123 更新时间:2023-12-05 00:50:56 25 4
gpt4 key购买 nike

我正在尝试通过生成一个虚拟变量并删除一些观察来 reshape 我的数据。它具有以下形式:

> df
id GP
1 1 0
2 1 3
3 1 4
4 2 0
5 2 3
6 2 0
7 3 2
8 3 2
9 4 5
10 4 0
>

GP 指的是玩过的游戏。现在我想生成一个虚拟变量,我们称它为 entry,它显示玩家 first 何时开始播放,然后我想在玩家首次进入后删除观察结果。我的最终数据集应如下所示:

    > df
id GP entry
1 1 0 0
2 1 3 1
3 2 0 1
4 2 3 1
5 3 2 1
6 4 5 1
>

因此,删除了原始数据集的第 3、6、8 和 10 行。我尝试生成一个虚拟变量,然后删除行:

df$entry <- ifelse(df$GP > 0, 1, 0)

for (i in 1:nrow(df)) {
df <- df[! (df$entry[i] ( if (df$entry[i] == 1 & df$entry[i-1] == 1 & df&id[i] == df&id[i-1] |
df$entry[i] == 1 & df$entry[i-1] == 0 & df&id[i] == df&id[i-1] ))),]
}

在这里,每当 GP > 0 时,我都会生成一个等于 1 的虚拟对象,然后我想根据循环中的 if 条件删除观察结果。也就是说,删除玩家所在的行entry = 1 不止一次,并且行在 entry = 1 之后。但是,我收到以下错误

Error: unexpected ')' in:
" df <- df[! (df$entry[i] ( if (df$entry[i] == 1 & df$entry[i-1] == 1 & df&id[i] == df&id[i-1] |
df$entry[i] == 1 & df$entry[i-1] == 0 & df&id_test[i] == df&id_test[i-1] ))"

删除括号只会导致更多错误。如有任何帮助或建议,我将不胜感激。

最佳答案

我们可以使用

library(dplyr)
df %>%
group_by(id) %>%
filter(cumsum(cumsum(GP > 0)) < 2) %>%
ungroup

-输出

# A tibble: 6 × 2
id GP
<int> <int>
1 1 0
2 1 3
3 2 0
4 2 3
5 3 2
6 4 5

或者用 slice

df %>%
group_by(id) %>%
slice(seq_len(which(GP > 0)[1])) %>%
ungroup

数据

df <- structure(list(id = c(1L, 1L, 1L, 2L, 2L, 2L, 3L, 3L, 4L, 4L), 
GP = c(0L, 3L, 4L, 0L, 3L, 0L, 2L, 2L, 5L, 0L)),
class = "data.frame", row.names = c("1",
"2", "3", "4", "5", "6", "7", "8", "9", "10"))

关于r - 根据 R 中的先前单元格删除行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73477827/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com