【问题标题】:Dealing dataframes with conditional statements使用条件语句处理数据帧
【发布时间】:2023-03-10 06:05:01
【问题描述】:

接着前面两个问题:

removing the first 3 rows of a group with conditional statement in r

Assigning NAs to rows with conditional statement in r

我的代码有些问题。如果不是删除行,我想将 NA 分配给第一行中的值大于 2 的每个事件。因此,如果事件在其第一行中的值大于 2,我想将 NA 分配给那个行,以及该事件的即将到来的两行。如果事件没有更多行,只需将 NA 分配给事件具有的行。

这是一个例子,有一列我想要的输出。

Event<- c(1,1,1,1,1,2,2,2,2,3,3,4,5,6,6,6,7,7,7,7) 
Value<- c(1,0,8,0,8,8,7,1,10,4,0,1,10,3,0,0,NA,NA,5,0) 
Desire_output<- c(1,0,8,0,8,NA, NA, NA,10,NA,NA,1,NA,NA,NA,NA,NA,NA,5,0)
AAA<- data.frame(Event, Value, Desire_output) 
     Event Value    Desire_output
1      1     1             1
2      1     0             0
3      1     8             8
4      1     0             0
5      1     8             8
6      2     8            NA
7      2     7            NA
8      2     1            NA
9      2    10            10
10     3     4            NA
11     3     0            NA
12     4     1             1
13     5    10            NA
14     6     3            NA
15     6     0            NA
16     6     0            NA
17     7    NA            NA
18     7    NA            NA
19     7     5             5
20     7     0             0

注意:如果事件以 NA 开头,则什么也不做(如事件 7)。

如果您有任何想法,请告诉我,并提前感谢您的宝贵时间。

【问题讨论】:

  • 您打错字了:您的第 9 个 Desire_output 创建为 0,但您将其显示为 10

标签: r dplyr conditional-statements tidyverse na


【解决方案1】:

这是一个 dplyr 管道来执行此操作:

library(dplyr)
AAA %>%
  group_by(Event) %>%
  mutate(
    bad = row_number() == 1 & !is.na(Value) & Value >= 2,
    bad = bad | lag(bad, default = FALSE) | lag(bad, 2, default = FALSE),
    bad = bad | is.na(Value),
    Value2 = if_else(bad, NA_real_, Value)
  ) %>%
  ungroup()
# # A tibble: 20 x 5
#    Event Value Desire_output bad   Value2
#    <dbl> <dbl>         <dbl> <lgl>  <dbl>
#  1     1     1             1 FALSE      1
#  2     1     0             0 FALSE      0
#  3     1     8             8 FALSE      8
#  4     1     0             0 FALSE      0
#  5     1     8             8 FALSE      8
#  6     2     8            NA TRUE      NA
#  7     2     7            NA TRUE      NA
#  8     2     1            NA TRUE      NA
#  9     2    10            10 FALSE     10
# 10     3     4            NA TRUE      NA
# 11     3     0            NA TRUE      NA
# 12     4     1             1 FALSE      1
# 13     5    10            NA TRUE      NA
# 14     6     3            NA TRUE      NA
# 15     6     0            NA TRUE      NA
# 16     6     0            NA TRUE      NA
# 17     7    NA            NA TRUE      NA
# 18     7    NA            NA TRUE      NA
# 19     7     5             5 FALSE      5
# 20     7     0             0 FALSE      0

我更新了数据

AAA$Desire_output[9] <- 10

因为它与您显示的框架不一致(并且显示更有意义)。

【讨论】:

  • Noel,这能回答你的问题吗?如果是,请接受。谢谢!
猜你喜欢
  • 2019-12-22
  • 2022-08-22
  • 2014-09-13
  • 2021-01-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多