【发布时间】:2019-11-21 07:04:06
【问题描述】:
在下面的数据集中,对于每个 id,我已标记(m_flag 用于列 m,f_flag 用于列 w)在 m OR w 列中的 3 之后第一次出现 1 或 2。
我正在尝试:
1) 如果 m 缺失但 var 1 不存在,则在 m 中 3 之前的行中将 m_flag 设置为 1
然后,将m_flag中之前的1转换为0
2) 如果 w 缺失但 var 2 不存在,则在 w 中 3 之前的行中将 f_flag 设置为 1(例如,第 7 行)
然后,将 f_flag 中的前一个 1 转换为 0(例如,第 6 行)
df <- data.frame(id=c(1,1,1, 2,2, 3,3,3, 4,4,4),
m=c(2,NA,NA, 2,3, 2,2,3, 2,2,3),
w=c(2,NA,3, 2,NA, 2,NA,3, 2,NA,3),
var1=c(5,NA,NA, 6,6,7,7,7, 8,8,8),
var2=c(3,3,3, 4,NA, 5,5,5, 6,NA,6),
m_flag=c(1,0,NA, 1,NA, 0,1,NA, 0,1,NA),
f_flag=c(1,0,NA, 1,NA, 1,0,NA, 1,0,NA))
> df
id m w var1 var2 m_flag f_flag
1 1 2 2 5 3 1 1
2 1 NA NA NA 3 0 0
3 1 NA 3 NA 3 NA NA
4 2 2 2 6 4 1 1
5 2 3 NA 6 NA NA NA
6 3 2 2 7 5 0 1
7 3 2 NA 7 5 1 0
8 3 3 3 7 5 NA NA
9 4 2 2 8 6 0 1
10 4 2 NA 8 NA 1 0
11 4 3 3 8 6 NA NA
输出(注意:只有第 7 行中的 1 会从 0 变为 1,而第 6 行中的 0 会从 1 变为 0)
output <- data.frame(id=c(1,1,1, 2,2, 3,3,3, 4,4,4),
m=c(2,NA,NA, 2,3, 2,2,3, 2,2,3),
w=c(2,NA,3, 2,NA, 2,NA,3, 2,NA,3),
var1=c(5,NA,NA, 6,6,7,7,7, 8,8,8),
var2=c(3,3,3, 4,NA, 5,5,5, 6,NA,6),
m_flag=c(1,0,NA, 1,NA, 0,1,NA, 0,1,NA),
f_flag=c(1,0,NA, 1,NA, 0,1,NA, 1,0,NA))
> output
id m w var1 var2 m_flag f_flag
1 1 2 2 5 3 1 1
2 1 NA NA NA 3 0 0
3 1 NA 3 NA 3 NA NA
4 2 2 2 6 4 1 1
5 2 3 NA 6 NA NA NA
6 3 2 2 7 5 0 **0**
7 3 2 NA 7 5 1 **1**
8 3 3 3 7 5 NA NA
9 4 2 2 8 6 0 1
10 4 2 NA 8 NA 1 0
11 4 3 3 8 6 NA NA
谢谢
【问题讨论】:
-
我很确定第 1 行和第 2 行中的
f_flag也应该根据您编写的规则进行交换。