仅当特定值不使用 r 时才绑定 table
Bind table only if specific value doesn't using r
是否可以仅在缺少特定值的情况下绑定行?
在这个例子中,我有一个 table,其中包含四个 ID 和一些值。每个 ID 都假设有一个对应的值 1-3。如您所见,table dat
中缺少其中一些值。要解决此问题,我想将 dat
与 dat2
绑定,但仅在 table dat
中缺少“值”列中的值的情况下。我怎样才能做到这一点?
明确地说,我总共只想要 12 行。因此,例如,ID 4 的值为 3 并且 cat_var table dat
中的“绿色”。相比之下,在 table dat2
中,ID 4 的值为 3 且 cat_var “red”。这意味着我不想绑定该行,因为在 table dat
中已经存在 ID 4 和值 3 的行。我希望我说清楚了。
library(tidyverse)
数据:
id <- c(rep(1:4,3))
value <- c(rep(1:3, each = 4))
dat <- data.frame(id, value)
dat2 <- dat
dat <- dat %>%
slice(1, 3, 5, 6, 7, 8, 10, 12)
dat2$cat_var <- c(rep("orange", 5), rep("green", 5), rep("red", 2))
dat$cat_var <- c(rep("orange", 3), rep("green", 5))
想要的结果:
# A tibble: 12 x 3
id value cat_var
<int> <int> <chr>
1 1 1 orange
2 2 1 orange
3 3 1 orange
4 4 1 orange
5 1 2 orange
6 2 2 green
7 3 2 green
8 4 2 green
9 1 3 green
10 2 3 green
11 3 3 red
12 4 3 green
dat %>% bind_rows(dat2) %>% distinct(id, value, .keep_all = T) %>%
arrange(value, id)
结果:
id value cat_var
1 1 1 orange
2 2 1 orange
3 3 1 orange
4 4 1 orange
5 1 2 orange
6 2 2 green
7 3 2 green
8 4 2 green
9 1 3 green
10 2 3 green
11 3 3 red
12 4 3 green
您不需要安排(只是为了获得与处理结果完全相同的数据帧)。
使用基础 R :
行绑定 dat
和 dat2
并使用 duplicated
保持唯一行。
result <- rbind(dat, dat2)
result <- result[!duplicated(result[, c('id', 'value')]), ]
result
# id value cat_var
#1 1 1 orange
#2 3 1 orange
#3 1 2 orange
#4 2 2 green
#5 3 2 green
#6 4 2 green
#7 2 3 green
#8 4 3 green
#10 2 1 orange
#12 4 1 orange
#17 1 3 green
#19 3 3 red
是否可以仅在缺少特定值的情况下绑定行?
在这个例子中,我有一个 table,其中包含四个 ID 和一些值。每个 ID 都假设有一个对应的值 1-3。如您所见,table dat
中缺少其中一些值。要解决此问题,我想将 dat
与 dat2
绑定,但仅在 table dat
中缺少“值”列中的值的情况下。我怎样才能做到这一点?
明确地说,我总共只想要 12 行。因此,例如,ID 4 的值为 3 并且 cat_var table dat
中的“绿色”。相比之下,在 table dat2
中,ID 4 的值为 3 且 cat_var “red”。这意味着我不想绑定该行,因为在 table dat
中已经存在 ID 4 和值 3 的行。我希望我说清楚了。
library(tidyverse)
数据:
id <- c(rep(1:4,3))
value <- c(rep(1:3, each = 4))
dat <- data.frame(id, value)
dat2 <- dat
dat <- dat %>%
slice(1, 3, 5, 6, 7, 8, 10, 12)
dat2$cat_var <- c(rep("orange", 5), rep("green", 5), rep("red", 2))
dat$cat_var <- c(rep("orange", 3), rep("green", 5))
想要的结果:
# A tibble: 12 x 3
id value cat_var
<int> <int> <chr>
1 1 1 orange
2 2 1 orange
3 3 1 orange
4 4 1 orange
5 1 2 orange
6 2 2 green
7 3 2 green
8 4 2 green
9 1 3 green
10 2 3 green
11 3 3 red
12 4 3 green
dat %>% bind_rows(dat2) %>% distinct(id, value, .keep_all = T) %>%
arrange(value, id)
结果:
id value cat_var
1 1 1 orange
2 2 1 orange
3 3 1 orange
4 4 1 orange
5 1 2 orange
6 2 2 green
7 3 2 green
8 4 2 green
9 1 3 green
10 2 3 green
11 3 3 red
12 4 3 green
您不需要安排(只是为了获得与处理结果完全相同的数据帧)。
使用基础 R :
行绑定 dat
和 dat2
并使用 duplicated
保持唯一行。
result <- rbind(dat, dat2)
result <- result[!duplicated(result[, c('id', 'value')]), ]
result
# id value cat_var
#1 1 1 orange
#2 3 1 orange
#3 1 2 orange
#4 2 2 green
#5 3 2 green
#6 4 2 green
#7 2 3 green
#8 4 3 green
#10 2 1 orange
#12 4 1 orange
#17 1 3 green
#19 3 3 red