Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在R数据帧中满足条件后的第二天,如何有条件地删除数据值?_R_Dataframe_If Statement_Filter_Conditional Statements - Fatal编程技术网

在R数据帧中满足条件后的第二天,如何有条件地删除数据值?

在R数据帧中满足条件后的第二天,如何有条件地删除数据值?,r,dataframe,if-statement,filter,conditional-statements,R,Dataframe,If Statement,Filter,Conditional Statements,我处理的是一些环境数据,包括每天的总降雨量。我想删除雨总量超过零(雨>0)的所有天以及雨事件发生后的所有天的所有“值”(标记为“NA”)。例如,如果2018年1月3日rain>0,则将“value”coulmn中的所有数据标记为“NA”,对应于2018年1月3日和2018年1月4日。为同一天设置条件很容易,但我也在琢磨如何引用第二天 date plot treatment rain value 1 2018-01-01 1 control 0 1

我处理的是一些环境数据,包括每天的总降雨量。我想删除雨总量超过零(雨>0)的所有天以及雨事件发生后的所有天的所有“值”(标记为“NA”)。例如,如果2018年1月3日rain>0,则将“value”coulmn中的所有数据标记为“NA”,对应于2018年1月3日和2018年1月4日。为同一天设置条件很容易,但我也在琢磨如何引用第二天

            date plot treatment rain value
1  2018-01-01    1   control    0     1
2  2018-01-02    1   control    0     2
3  2018-01-03    1   control    2    NA
4  2018-01-04    1   control    0    NA
5  2018-01-05    1   control    0     5
6  2018-01-01    2   control    0     6
7  2018-01-02    2   control    0     7
8  2018-01-03    2   control    2    NA
9  2018-01-04    2   control    0    NA
10 2018-01-05    2   control    0    10
11 2018-01-01    3     treat    0    11
12 2018-01-02    3     treat    0    12
13 2018-01-03    3     treat    2    NA
14 2018-01-04    3     treat    0    NA
15 2018-01-05    3     treat    0    15
16 2018-01-01    4     treat    0    16
17 2018-01-02    4     treat    0    17
18 2018-01-03    4     treat    2    NA
19 2018-01-04    4     treat    0    NA
20 2018-01-05    4     treat    0    20
以下是一个示例数据帧:

date <- seq(as.Date("2018-1-1"), as.Date("2018-1-5"), by = 
              "1 days")
plot <- rep(c(1:4), each = 5)
treatment <- rep(c('control','treat'),each = 10)
rain <- c(0,0,2,0,0,0,0,2,0,0,0,0,2,0,0,0,0,2,0,0)
value <- (seq(1:20))
df <- data.frame(date, plot, treatment, rain,value)
df$date <- rep(date, length=nrow(df))
df



date plot treatment rain value
1  2018-01-01    1   control    0     1
2  2018-01-02    1   control    0     2
3  2018-01-03    1   control    2     3
4  2018-01-04    1   control    0     4
5  2018-01-05    1   control    0     5
6  2018-01-01    2   control    0     6
7  2018-01-02    2   control    0     7
8  2018-01-03    2   control    2     8
9  2018-01-04    2   control    0     9
10 2018-01-05    2   control    0    10
11 2018-01-01    3     treat    0    11
12 2018-01-02    3     treat    0    12
13 2018-01-03    3     treat    2    13
14 2018-01-04    3     treat    0    14
15 2018-01-05    3     treat    0    15
16 2018-01-01    4     treat    0    16
17 2018-01-02    4     treat    0    17
18 2018-01-03    4     treat    2    18
19 2018-01-04    4     treat    0    19
20 2018-01-05    4     treat    0    20
            date plot treatment rain value
1  2018-01-01    1   control    0     1
2  2018-01-02    1   control    0     2
3  2018-01-03    1   control    2    NA
4  2018-01-04    1   control    0    NA
5  2018-01-05    1   control    0     5
6  2018-01-01    2   control    0     6
7  2018-01-02    2   control    0     7
8  2018-01-03    2   control    2    NA
9  2018-01-04    2   control    0    NA
10 2018-01-05    2   control    0    10
11 2018-01-01    3     treat    0    11
12 2018-01-02    3     treat    0    12
13 2018-01-03    3     treat    2    NA
14 2018-01-04    3     treat    0    NA
15 2018-01-05    3     treat    0    15
16 2018-01-01    4     treat    0    16
17 2018-01-02    4     treat    0    17
18 2018-01-03    4     treat    2    NA
19 2018-01-04    4     treat    0    NA
20 2018-01-05    4     treat    0    20
(预先:所有这些解决方案都依赖于提前设置的顺序。外部排序并不困难,可能使用
dplyr::arrange
或base
order

            date plot treatment rain value
1  2018-01-01    1   control    0     1
2  2018-01-02    1   control    0     2
3  2018-01-03    1   control    2    NA
4  2018-01-04    1   control    0    NA
5  2018-01-05    1   control    0     5
6  2018-01-01    2   control    0     6
7  2018-01-02    2   control    0     7
8  2018-01-03    2   control    2    NA
9  2018-01-04    2   control    0    NA
10 2018-01-05    2   control    0    10
11 2018-01-01    3     treat    0    11
12 2018-01-02    3     treat    0    12
13 2018-01-03    3     treat    2    NA
14 2018-01-04    3     treat    0    NA
15 2018-01-05    3     treat    0    15
16 2018-01-01    4     treat    0    16
17 2018-01-02    4     treat    0    17
18 2018-01-03    4     treat    2    NA
19 2018-01-04    4     treat    0    NA
20 2018-01-05    4     treat    0    20
使用
dplyr
可通过以下方式完成此操作:

            date plot treatment rain value
1  2018-01-01    1   control    0     1
2  2018-01-02    1   control    0     2
3  2018-01-03    1   control    2    NA
4  2018-01-04    1   control    0    NA
5  2018-01-05    1   control    0     5
6  2018-01-01    2   control    0     6
7  2018-01-02    2   control    0     7
8  2018-01-03    2   control    2    NA
9  2018-01-04    2   control    0    NA
10 2018-01-05    2   control    0    10
11 2018-01-01    3     treat    0    11
12 2018-01-02    3     treat    0    12
13 2018-01-03    3     treat    2    NA
14 2018-01-04    3     treat    0    NA
15 2018-01-05    3     treat    0    15
16 2018-01-01    4     treat    0    16
17 2018-01-02    4     treat    0    17
18 2018-01-03    4     treat    2    NA
19 2018-01-04    4     treat    0    NA
20 2018-01-05    4     treat    0    20
库(dplyr)
df%>%
分组依据(绘图、处理)%>%
变异(值=if_else(rain>0 | lag(rain>0,默认值=FALSE),NA_integer_u,value))%>%
解组()
##A tibble:20 x 5
#日期图处理雨量值
#                 
#1 2018-01-01 1控制0 1
#2 2018-01-02 1控制0 2
#3 2018-01-03 1控制2不适用
#4 2018-01-04 1控制0 NA
#5 2018-01-05 1控制0 5
#6 2018-01-01 2控制0 6
#7 2018-01-02 2控制0 7
#8 2018-01-03 2控制2不适用
#9 2018-01-04 2对照组0不适用
#10 2018-01-05 2控制0 10
#11 2018-01-01 3治疗0 11
#12 2018-01-02 3治疗0 12
#13 2018-01-03治疗2不适用
#14 2018-01-04 3治疗0不适用
#15 2018-01-05 3治疗0 15
#16 2018-01-01 4治疗0 16
#17 2018-01-02 4治疗0 17
#18 2018-01-03 4治疗2不适用
#19 2018-01-04 4治疗不适用
#20 2018-01-05 4治疗0 20
或者,使用
data.table

            date plot treatment rain value
1  2018-01-01    1   control    0     1
2  2018-01-02    1   control    0     2
3  2018-01-03    1   control    2    NA
4  2018-01-04    1   control    0    NA
5  2018-01-05    1   control    0     5
6  2018-01-01    2   control    0     6
7  2018-01-02    2   control    0     7
8  2018-01-03    2   control    2    NA
9  2018-01-04    2   control    0    NA
10 2018-01-05    2   control    0    10
11 2018-01-01    3     treat    0    11
12 2018-01-02    3     treat    0    12
13 2018-01-03    3     treat    2    NA
14 2018-01-04    3     treat    0    NA
15 2018-01-05    3     treat    0    15
16 2018-01-01    4     treat    0    16
17 2018-01-02    4     treat    0    17
18 2018-01-03    4     treat    2    NA
19 2018-01-04    4     treat    0    NA
20 2018-01-05    4     treat    0    20
库(data.table)
DT 0 |偏移(雨水>0),值:=NA,由=(绘图,处理)]
在base-R中可能不那么优雅:

            date plot treatment rain value
1  2018-01-01    1   control    0     1
2  2018-01-02    1   control    0     2
3  2018-01-03    1   control    2    NA
4  2018-01-04    1   control    0    NA
5  2018-01-05    1   control    0     5
6  2018-01-01    2   control    0     6
7  2018-01-02    2   control    0     7
8  2018-01-03    2   control    2    NA
9  2018-01-04    2   control    0    NA
10 2018-01-05    2   control    0    10
11 2018-01-01    3     treat    0    11
12 2018-01-02    3     treat    0    12
13 2018-01-03    3     treat    2    NA
14 2018-01-04    3     treat    0    NA
15 2018-01-05    3     treat    0    15
16 2018-01-01    4     treat    0    16
17 2018-01-02    4     treat    0    17
18 2018-01-03    4     treat    2    NA
19 2018-01-04    4     treat    0    NA
20 2018-01-05    4     treat    0    20
do.call(rbind.data.frame,
由(df,df[,c(“绘图”、“处理”)],函数(x){
n0 | c(假,雨[-n]>0)]=NA})
})
)
(尽管最后一个可能无法保持行的顺序相同)

            date plot treatment rain value
1  2018-01-01    1   control    0     1
2  2018-01-02    1   control    0     2
3  2018-01-03    1   control    2    NA
4  2018-01-04    1   control    0    NA
5  2018-01-05    1   control    0     5
6  2018-01-01    2   control    0     6
7  2018-01-02    2   control    0     7
8  2018-01-03    2   control    2    NA
9  2018-01-04    2   control    0    NA
10 2018-01-05    2   control    0    10
11 2018-01-01    3     treat    0    11
12 2018-01-02    3     treat    0    12
13 2018-01-03    3     treat    2    NA
14 2018-01-04    3     treat    0    NA
15 2018-01-05    3     treat    0    15
16 2018-01-01    4     treat    0    16
17 2018-01-02    4     treat    0    17
18 2018-01-03    4     treat    2    NA
19 2018-01-04    4     treat    0    NA
20 2018-01-05    4     treat    0    20

数据:

            date plot treatment rain value
1  2018-01-01    1   control    0     1
2  2018-01-02    1   control    0     2
3  2018-01-03    1   control    2    NA
4  2018-01-04    1   control    0    NA
5  2018-01-05    1   control    0     5
6  2018-01-01    2   control    0     6
7  2018-01-02    2   control    0     7
8  2018-01-03    2   control    2    NA
9  2018-01-04    2   control    0    NA
10 2018-01-05    2   control    0    10
11 2018-01-01    3     treat    0    11
12 2018-01-02    3     treat    0    12
13 2018-01-03    3     treat    2    NA
14 2018-01-04    3     treat    0    NA
15 2018-01-05    3     treat    0    15
16 2018-01-01    4     treat    0    16
17 2018-01-02    4     treat    0    17
18 2018-01-03    4     treat    2    NA
19 2018-01-04    4     treat    0    NA
20 2018-01-05    4     treat    0    20
df(预先:所有这些解决方案都依赖于提前设置的顺序。外部排序并不困难,可能使用
dplyr::arrange
或base
order

            date plot treatment rain value
1  2018-01-01    1   control    0     1
2  2018-01-02    1   control    0     2
3  2018-01-03    1   control    2    NA
4  2018-01-04    1   control    0    NA
5  2018-01-05    1   control    0     5
6  2018-01-01    2   control    0     6
7  2018-01-02    2   control    0     7
8  2018-01-03    2   control    2    NA
9  2018-01-04    2   control    0    NA
10 2018-01-05    2   control    0    10
11 2018-01-01    3     treat    0    11
12 2018-01-02    3     treat    0    12
13 2018-01-03    3     treat    2    NA
14 2018-01-04    3     treat    0    NA
15 2018-01-05    3     treat    0    15
16 2018-01-01    4     treat    0    16
17 2018-01-02    4     treat    0    17
18 2018-01-03    4     treat    2    NA
19 2018-01-04    4     treat    0    NA
20 2018-01-05    4     treat    0    20
使用
dplyr
可通过以下方式完成此操作:

            date plot treatment rain value
1  2018-01-01    1   control    0     1
2  2018-01-02    1   control    0     2
3  2018-01-03    1   control    2    NA
4  2018-01-04    1   control    0    NA
5  2018-01-05    1   control    0     5
6  2018-01-01    2   control    0     6
7  2018-01-02    2   control    0     7
8  2018-01-03    2   control    2    NA
9  2018-01-04    2   control    0    NA
10 2018-01-05    2   control    0    10
11 2018-01-01    3     treat    0    11
12 2018-01-02    3     treat    0    12
13 2018-01-03    3     treat    2    NA
14 2018-01-04    3     treat    0    NA
15 2018-01-05    3     treat    0    15
16 2018-01-01    4     treat    0    16
17 2018-01-02    4     treat    0    17
18 2018-01-03    4     treat    2    NA
19 2018-01-04    4     treat    0    NA
20 2018-01-05    4     treat    0    20
库(dplyr)
df%>%
分组依据(绘图、处理)%>%
变异(值=if_else(rain>0 | lag(rain>0,默认值=FALSE),NA_integer_u,value))%>%
解组()
##A tibble:20 x 5
#日期图处理雨量值
#                 
#1 2018-01-01 1控制0 1
#2 2018-01-02 1控制0 2
#3 2018-01-03 1控制2不适用
#4 2018-01-04 1控制0 NA
#5 2018-01-05 1控制0 5
#6 2018-01-01 2控制0 6
#7 2018-01-02 2控制0 7
#8 2018-01-03 2控制2不适用
#9 2018-01-04 2对照组0不适用
#10 2018-01-05 2控制0 10
#11 2018-01-01 3治疗0 11
#12 2018-01-02 3治疗0 12
#13 2018-01-03治疗2不适用
#14 2018-01-04 3治疗0不适用
#15 2018-01-05 3治疗0 15
#16 2018-01-01 4治疗0 16
#17 2018-01-02 4治疗0 17
#18 2018-01-03 4治疗2不适用
#19 2018-01-04 4治疗不适用
#20 2018-01-05 4治疗0 20
或者,使用
data.table

            date plot treatment rain value
1  2018-01-01    1   control    0     1
2  2018-01-02    1   control    0     2
3  2018-01-03    1   control    2    NA
4  2018-01-04    1   control    0    NA
5  2018-01-05    1   control    0     5
6  2018-01-01    2   control    0     6
7  2018-01-02    2   control    0     7
8  2018-01-03    2   control    2    NA
9  2018-01-04    2   control    0    NA
10 2018-01-05    2   control    0    10
11 2018-01-01    3     treat    0    11
12 2018-01-02    3     treat    0    12
13 2018-01-03    3     treat    2    NA
14 2018-01-04    3     treat    0    NA
15 2018-01-05    3     treat    0    15
16 2018-01-01    4     treat    0    16
17 2018-01-02    4     treat    0    17
18 2018-01-03    4     treat    2    NA
19 2018-01-04    4     treat    0    NA
20 2018-01-05    4     treat    0    20
库(data.table)
DT 0 |偏移(雨水>0),值:=NA,由=(绘图,处理)]
在base-R中可能不那么优雅:

            date plot treatment rain value
1  2018-01-01    1   control    0     1
2  2018-01-02    1   control    0     2
3  2018-01-03    1   control    2    NA
4  2018-01-04    1   control    0    NA
5  2018-01-05    1   control    0     5
6  2018-01-01    2   control    0     6
7  2018-01-02    2   control    0     7
8  2018-01-03    2   control    2    NA
9  2018-01-04    2   control    0    NA
10 2018-01-05    2   control    0    10
11 2018-01-01    3     treat    0    11
12 2018-01-02    3     treat    0    12
13 2018-01-03    3     treat    2    NA
14 2018-01-04    3     treat    0    NA
15 2018-01-05    3     treat    0    15
16 2018-01-01    4     treat    0    16
17 2018-01-02    4     treat    0    17
18 2018-01-03    4     treat    2    NA
19 2018-01-04    4     treat    0    NA
20 2018-01-05    4     treat    0    20
do.call(rbind.data.frame,
由(df,df[,c(“绘图”、“处理”)],函数(x){
n0 | c(假,雨[-n]>0)]=NA})
})
)
(尽管最后一个可能无法保持行的顺序相同)

            date plot treatment rain value
1  2018-01-01    1   control    0     1
2  2018-01-02    1   control    0     2
3  2018-01-03    1   control    2    NA
4  2018-01-04    1   control    0    NA
5  2018-01-05    1   control    0     5
6  2018-01-01    2   control    0     6
7  2018-01-02    2   control    0     7
8  2018-01-03    2   control    2    NA
9  2018-01-04    2   control    0    NA
10 2018-01-05    2   control    0    10
11 2018-01-01    3     treat    0    11
12 2018-01-02    3     treat    0    12
13 2018-01-03    3     treat    2    NA
14 2018-01-04    3     treat    0    NA
15 2018-01-05    3     treat    0    15
16 2018-01-01    4     treat    0    16
17 2018-01-02    4     treat    0    17
18 2018-01-03    4     treat    2    NA
19 2018-01-04    4     treat    0    NA
20 2018-01-05    4     treat    0    20

数据:

            date plot treatment rain value
1  2018-01-01    1   control    0     1
2  2018-01-02    1   control    0     2
3  2018-01-03    1   control    2    NA
4  2018-01-04    1   control    0    NA
5  2018-01-05    1   control    0     5
6  2018-01-01    2   control    0     6
7  2018-01-02    2   control    0     7
8  2018-01-03    2   control    2    NA
9  2018-01-04    2   control    0    NA
10 2018-01-05    2   control    0    10
11 2018-01-01    3     treat    0    11
12 2018-01-02    3     treat    0    12
13 2018-01-03    3     treat    2    NA
14 2018-01-04    3     treat    0    NA
15 2018-01-05    3     treat    0    15
16 2018-01-01    4     treat    0    16
17 2018-01-02    4     treat    0    17
18 2018-01-03    4     treat    2    NA
19 2018-01-04    4     treat    0    NA
20 2018-01-05    4     treat    0    20
df当你说“所有天后”,你真的是指“和第二天”?当你说“所有天后”,你真的是指“和第二天”?