有条件地生成id r
generate id conditionally r
我的数据是这样的
large_region medium_region id id2 xinterceptm
1 NA NA NA 1 1
2 FL-L-2 FL-M-4 1.00 2 NA
3 FL-L-2 FL-M-4 2.00 3 NA
4 NA NA NA 4 4
5 FL-L-2 FL-M-5 3.00 5 NA
6 FL-L-2 FL-M-5 4.00 6 NA
7 NA NA NA 7 7
8 FL-L-5 FL-M-14 5.00 8 NA
9 FL-L-5 FL-M-14 6.00 9 NA
10 NA NA NA 10 10
11 FL-L-5 FL-M-13 7.00 11 NA
12 FL-L-5 FL-M-13 8.00 12 NA
13 NA NA NA 13 13
xinterceptm
分隔medium region,medium region嵌套在large region中。我想创建一个新的 id 来分隔大区域。我怎样才能像这样创建 xinterceptl
:
large_region medium_region id id2 xinterceptm xinterceptl
1 NA NA NA 1 1 1
2 FL-L-2 FL-M-4 1.00 2 NA NA
3 FL-L-2 FL-M-4 2.00 3 NA NA
4 NA NA NA 4 4 NA
5 FL-L-2 FL-M-5 3.00 5 NA NA
6 FL-L-2 FL-M-5 4.00 6 NA NA
7 NA NA NA 7 7 7
8 FL-L-5 FL-M-14 5.00 8 NA NA
9 FL-L-5 FL-M-14 6.00 9 NA NA
10 NA NA NA 10 10 NA
11 FL-L-5 FL-M-13 7.00 11 NA NA
12 FL-L-5 FL-M-13 8.00 12 NA NA
13 NA NA NA 13 13 13
谢谢!!
我们可以使用 dplyr 包中的 case_when
来评估 large_region
中的条件。
library(dplyr)
dat2 <- dat %>%
mutate(xinterceptl = case_when(
!is.na(large_region) ~NA_integer_,
is.na(large_region) & (lead(large_region) == lag(large_region)) ~NA_integer_,
TRUE ~id2
))
dat2
# large_region medium_region id id2 xinterceptm xinterceptl
# 1 <NA> <NA> NA 1 1 1
# 2 FL-L-2 FL-M-4 1 2 NA NA
# 3 FL-L-2 FL-M-4 2 3 NA NA
# 4 <NA> <NA> NA 4 4 NA
# 5 FL-L-2 FL-M-5 3 5 NA NA
# 6 FL-L-2 FL-M-5 4 6 NA NA
# 7 <NA> <NA> NA 7 7 7
# 8 FL-L-5 FL-M-14 5 8 NA NA
# 9 FL-L-5 FL-M-14 6 9 NA NA
# 10 <NA> <NA> NA 10 10 NA
# 11 FL-L-5 FL-M-13 7 11 NA NA
# 12 FL-L-5 FL-M-13 8 12 NA NA
# 13 <NA> <NA> NA 13 13 13
数据
dat <- read.table(text = " large_region medium_region id id2 xinterceptm
1 NA NA NA 1 1
2 FL-L-2 FL-M-4 1.00 2 NA
3 FL-L-2 FL-M-4 2.00 3 NA
4 NA NA NA 4 4
5 FL-L-2 FL-M-5 3.00 5 NA
6 FL-L-2 FL-M-5 4.00 6 NA
7 NA NA NA 7 7
8 FL-L-5 FL-M-14 5.00 8 NA
9 FL-L-5 FL-M-14 6.00 9 NA
10 NA NA NA 10 10
11 FL-L-5 FL-M-13 7.00 11 NA
12 FL-L-5 FL-M-13 8.00 12 NA
13 NA NA NA 13 13",
header = TRUE, stringsAsFactors = FALSE)
dat%>%fill(large_region,.direction="up")%>%
mutate(a=large_region!=lag(large_region),a=id2*(is.na(a)|a),a=`is.na<-`(a,a==0))
large_region medium_region id id2 xinterceptm a
1 FL-L-2 <NA> NA 1 1 1
2 FL-L-2 FL-M-4 1 2 NA NA
3 FL-L-2 FL-M-4 2 3 NA NA
4 FL-L-2 <NA> NA 4 4 NA
5 FL-L-2 FL-M-5 3 5 NA NA
6 FL-L-2 FL-M-5 4 6 NA NA
7 FL-L-5 <NA> NA 7 7 7
8 FL-L-5 FL-M-14 5 8 NA NA
9 FL-L-5 FL-M-14 6 9 NA NA
10 FL-L-5 <NA> NA 10 10 NA
11 FL-L-5 FL-M-13 7 11 NA NA
12 FL-L-5 FL-M-13 8 12 NA NA
13 <NA> <NA> NA 13 13 13
我的数据是这样的
large_region medium_region id id2 xinterceptm
1 NA NA NA 1 1
2 FL-L-2 FL-M-4 1.00 2 NA
3 FL-L-2 FL-M-4 2.00 3 NA
4 NA NA NA 4 4
5 FL-L-2 FL-M-5 3.00 5 NA
6 FL-L-2 FL-M-5 4.00 6 NA
7 NA NA NA 7 7
8 FL-L-5 FL-M-14 5.00 8 NA
9 FL-L-5 FL-M-14 6.00 9 NA
10 NA NA NA 10 10
11 FL-L-5 FL-M-13 7.00 11 NA
12 FL-L-5 FL-M-13 8.00 12 NA
13 NA NA NA 13 13
xinterceptm
分隔medium region,medium region嵌套在large region中。我想创建一个新的 id 来分隔大区域。我怎样才能像这样创建 xinterceptl
:
large_region medium_region id id2 xinterceptm xinterceptl
1 NA NA NA 1 1 1
2 FL-L-2 FL-M-4 1.00 2 NA NA
3 FL-L-2 FL-M-4 2.00 3 NA NA
4 NA NA NA 4 4 NA
5 FL-L-2 FL-M-5 3.00 5 NA NA
6 FL-L-2 FL-M-5 4.00 6 NA NA
7 NA NA NA 7 7 7
8 FL-L-5 FL-M-14 5.00 8 NA NA
9 FL-L-5 FL-M-14 6.00 9 NA NA
10 NA NA NA 10 10 NA
11 FL-L-5 FL-M-13 7.00 11 NA NA
12 FL-L-5 FL-M-13 8.00 12 NA NA
13 NA NA NA 13 13 13
谢谢!!
我们可以使用 dplyr 包中的 case_when
来评估 large_region
中的条件。
library(dplyr)
dat2 <- dat %>%
mutate(xinterceptl = case_when(
!is.na(large_region) ~NA_integer_,
is.na(large_region) & (lead(large_region) == lag(large_region)) ~NA_integer_,
TRUE ~id2
))
dat2
# large_region medium_region id id2 xinterceptm xinterceptl
# 1 <NA> <NA> NA 1 1 1
# 2 FL-L-2 FL-M-4 1 2 NA NA
# 3 FL-L-2 FL-M-4 2 3 NA NA
# 4 <NA> <NA> NA 4 4 NA
# 5 FL-L-2 FL-M-5 3 5 NA NA
# 6 FL-L-2 FL-M-5 4 6 NA NA
# 7 <NA> <NA> NA 7 7 7
# 8 FL-L-5 FL-M-14 5 8 NA NA
# 9 FL-L-5 FL-M-14 6 9 NA NA
# 10 <NA> <NA> NA 10 10 NA
# 11 FL-L-5 FL-M-13 7 11 NA NA
# 12 FL-L-5 FL-M-13 8 12 NA NA
# 13 <NA> <NA> NA 13 13 13
数据
dat <- read.table(text = " large_region medium_region id id2 xinterceptm
1 NA NA NA 1 1
2 FL-L-2 FL-M-4 1.00 2 NA
3 FL-L-2 FL-M-4 2.00 3 NA
4 NA NA NA 4 4
5 FL-L-2 FL-M-5 3.00 5 NA
6 FL-L-2 FL-M-5 4.00 6 NA
7 NA NA NA 7 7
8 FL-L-5 FL-M-14 5.00 8 NA
9 FL-L-5 FL-M-14 6.00 9 NA
10 NA NA NA 10 10
11 FL-L-5 FL-M-13 7.00 11 NA
12 FL-L-5 FL-M-13 8.00 12 NA
13 NA NA NA 13 13",
header = TRUE, stringsAsFactors = FALSE)
dat%>%fill(large_region,.direction="up")%>%
mutate(a=large_region!=lag(large_region),a=id2*(is.na(a)|a),a=`is.na<-`(a,a==0))
large_region medium_region id id2 xinterceptm a
1 FL-L-2 <NA> NA 1 1 1
2 FL-L-2 FL-M-4 1 2 NA NA
3 FL-L-2 FL-M-4 2 3 NA NA
4 FL-L-2 <NA> NA 4 4 NA
5 FL-L-2 FL-M-5 3 5 NA NA
6 FL-L-2 FL-M-5 4 6 NA NA
7 FL-L-5 <NA> NA 7 7 7
8 FL-L-5 FL-M-14 5 8 NA NA
9 FL-L-5 FL-M-14 6 9 NA NA
10 FL-L-5 <NA> NA 10 10 NA
11 FL-L-5 FL-M-13 7 11 NA NA
12 FL-L-5 FL-M-13 8 12 NA NA
13 <NA> <NA> NA 13 13 13