首页 > 解决方案 > 使用 ifelse 编辑具有多个时间点的数据框

问题描述

我有这个数据框:

id <- c(1, 1, 2, 2, 3, 3)
x <- c(0, 0, 0, 0, 0, 0)
y <- c(NA, 5, 5, 5, NA, 5)
t <- c(1, 2, 1, 2, 1, 2)

df <- data.frame(id, t, x, y)
df

  id t x  y
1  1 1 0 NA
2  1 2 0  5
3  2 1 0  5
4  2 2 0  5
5  3 1 0 NA
6  3 2 0  5

idt在两个时间点参考三个案例。x并且y是一些随机值。现在我想将 9 添加到向量xin t = 2,但前提是yint = 1是 NA。

输出应如下所示:

> df
  id t x  y
1  1 1 0 NA
2  1 2 9  5
3  2 1 0  5
4  2 2 0  5
5  3 1 0 NA
6  3 2 9  5

我很感激任何帮助。此外,使用 ifelse 的解决方案会很棒。

标签: rdataframeif-statement

解决方案


我假设您想按组执行此操作。

这里对于id我们添加x + 9的每个t ==2if yat t==1is NA

library(dplyr)
df %>%
   group_by(id) %>%
   mutate(x = ifelse(is.na(y[t==1]) & t == 2, x + 9, x))

#    id     t     x     y
#  <dbl> <dbl> <dbl> <dbl>
#1    1.    1.    0.   NA 
#2    1.    2.    9.    5.
#3    2.    1.    0.    5.
#4    2.    2.    0.    5.
#5    3.    1.    0.   NA 
#6    3.    2.    9.    5.

推荐阅读