在r中选择特定值后选择行

发布于 2025-02-10 16:29:36 字数 1023 浏览 5 评论 0原文

我只想在值“ openwebsite”和“ closewebsite”之间选择我的数据框架的所有行(包括行本身)(请参阅变量“活动”)。我需要使用选择或过滤器功能吗?

非常感谢!

dataframe:

活动持续时间
19
1OpenWebsite8
1油漆9
12
14
1闭合Website9
14

输出

persitionutivation持续时间
1OpenWebsite1 OpenWebsite 8
1Paint9
12
14
1CloseWebsite9

I just want to select all the rows (including the row itself) of my data frame between the value "openwebsite" and "closewebsite" (see variable "activity"). Do I need to use the select- or filter-function?

Thank you a lot!

Dataframe:

Personactivityduration
1write9
1openwebsite8
1paint9
1write2
1write4
1closewebsite9
1write4

Output

Personactivityduration
1openwebsite8
1paint9
1write2
1write4
1closewebsite9

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

我是男神闪亮亮 2025-02-17 16:29:36

您可以尝试

library(dplyr)
df %>%
  filter(1 == cumsum((activity == "openwebsite") - 
                       lag(activity == "closewebsite", default = 0)))

  Person     activity duration
1      1  openwebsite        8
2      1        paint        9
3      1        write        2
4      1        write        4
5      1 closewebsite        9

df %>%
  filter(1 <= cumsum(activity == "openwebsite"),
         lag(cumsum(activity == "closewebsite")) < 1)

You may try

library(dplyr)
df %>%
  filter(1 == cumsum((activity == "openwebsite") - 
                       lag(activity == "closewebsite", default = 0)))

  Person     activity duration
1      1  openwebsite        8
2      1        paint        9
3      1        write        2
4      1        write        4
5      1 closewebsite        9

or

df %>%
  filter(1 <= cumsum(activity == "openwebsite"),
         lag(cumsum(activity == "closewebsite")) < 1)
梦魇绽荼蘼 2025-02-17 16:29:36
start_row <- (1:nrow(df))[df$activity == "openwebsite"]
end_row <- (1:nrow(df))[df$activity == "closewebsite"]
df[start_row:end_row,]

  Person     activity duration
2      1  openwebsite        8
3      1        paint        9
4      1        write        2
5      1        write        4
6      1 closewebsite        9

您还可以使用grep获得开始和结束编号,例如

grep("openwebsite", df$activity)
start_row <- (1:nrow(df))[df$activity == "openwebsite"]
end_row <- (1:nrow(df))[df$activity == "closewebsite"]
df[start_row:end_row,]

  Person     activity duration
2      1  openwebsite        8
3      1        paint        9
4      1        write        2
5      1        write        4
6      1 closewebsite        9

You can also get the start and end row number with grep, e.g.

grep("openwebsite", df$activity)
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文