用于删除组内值的 R 代码
R Code for removing values within a group
我正在处理类似于以下数据的数据:
ID <- seq(1,10,1)
Letter <- c("A", "B", "C","C", "C", "D", "D", "E","F", "F")
df<- data.frame(ID, Letter)
ID Letter
1 1 A
2 2 B
3 3 C
4 4 C
5 5 C
6 6 D
7 7 D
8 8 E
9 9 F
10 10 F
具体查看 Letter
列,我想对数据进行子集化,使 Letter
列仅包含 ID
值 4。但我想保留所有其他值以及。所以数据看起来像:
ID Letter
1 1 A
2 2 B
4 4 C
6 6 D
7 7 D
8 8 E
9 9 F
10 10 F
如果您能提供任何帮助,我们将不胜感激!
我们可以按操作进行分组,即按 'Letter' 分组,if
有 any
'ID' 有 4,只需根据该比较得到逻辑向量或 else
return 一切 (TRUE
)
library(dplyr)
df %>%
group_by(Letter) %>%
filter(if(any(ID == 4)) ID == 4 else TRUE)
# A tibble: 8 x 2
# Groups: Letter [6]
# ID Letter
# <dbl> <chr>
#1 1 A
#2 2 B
#3 4 C
#4 6 D
#5 7 D
#6 8 E
#7 9 F
#8 10 F
或者另一个不使用分组的选项是
df %>%
filter(Letter %in% setdiff(Letter, unique(Letter[ID == 4]))|ID == 4)
# ID Letter
#1 1 A
#2 2 B
#3 4 C
#4 6 D
#5 7 D
#6 8 E
#7 9 F
#8 10 F
及其在base R
中的对应实现
subset(df, Letter %in% setdiff(Letter, unique(Letter[ID == 4]))|ID == 4)
这是一个基本的 R 选项
subset(df,ave(ID==4,Letter,FUN = function(x) Negate(any)(x)|x))
给予
ID Letter
1 1 A
2 2 B
4 4 C
6 6 D
7 7 D
8 8 E
9 9 F
10 10 F
我们可以 subset
ID = 4
或 Letter
与 ID = 4
.
中的值不同的所有其他值
subset(df, ID == 4 | !Letter %in% Letter[ID == 4])
# ID Letter
#1 1 A
#2 2 B
#4 4 C
#6 6 D
#7 7 D
#8 8 E
#9 9 F
#10 10 F
也可以在dplyr
中写成:
library(dplyr)
df %>% filter(ID == 4 | !Letter %in% Letter[ID == 4])
我正在处理类似于以下数据的数据:
ID <- seq(1,10,1)
Letter <- c("A", "B", "C","C", "C", "D", "D", "E","F", "F")
df<- data.frame(ID, Letter)
ID Letter
1 1 A
2 2 B
3 3 C
4 4 C
5 5 C
6 6 D
7 7 D
8 8 E
9 9 F
10 10 F
具体查看 Letter
列,我想对数据进行子集化,使 Letter
列仅包含 ID
值 4。但我想保留所有其他值以及。所以数据看起来像:
ID Letter
1 1 A
2 2 B
4 4 C
6 6 D
7 7 D
8 8 E
9 9 F
10 10 F
如果您能提供任何帮助,我们将不胜感激!
我们可以按操作进行分组,即按 'Letter' 分组,if
有 any
'ID' 有 4,只需根据该比较得到逻辑向量或 else
return 一切 (TRUE
)
library(dplyr)
df %>%
group_by(Letter) %>%
filter(if(any(ID == 4)) ID == 4 else TRUE)
# A tibble: 8 x 2
# Groups: Letter [6]
# ID Letter
# <dbl> <chr>
#1 1 A
#2 2 B
#3 4 C
#4 6 D
#5 7 D
#6 8 E
#7 9 F
#8 10 F
或者另一个不使用分组的选项是
df %>%
filter(Letter %in% setdiff(Letter, unique(Letter[ID == 4]))|ID == 4)
# ID Letter
#1 1 A
#2 2 B
#3 4 C
#4 6 D
#5 7 D
#6 8 E
#7 9 F
#8 10 F
及其在base R
subset(df, Letter %in% setdiff(Letter, unique(Letter[ID == 4]))|ID == 4)
这是一个基本的 R 选项
subset(df,ave(ID==4,Letter,FUN = function(x) Negate(any)(x)|x))
给予
ID Letter
1 1 A
2 2 B
4 4 C
6 6 D
7 7 D
8 8 E
9 9 F
10 10 F
我们可以 subset
ID = 4
或 Letter
与 ID = 4
.
subset(df, ID == 4 | !Letter %in% Letter[ID == 4])
# ID Letter
#1 1 A
#2 2 B
#4 4 C
#6 6 D
#7 7 D
#8 8 E
#9 9 F
#10 10 F
也可以在dplyr
中写成:
library(dplyr)
df %>% filter(ID == 4 | !Letter %in% Letter[ID == 4])