如何在 r 中使用“not in”运算符(附示例)


您可以使用以下基本语法来选择不在 R 中的值列表中的所有元素:

 ! (data %in% c(value1, value2, value3, ...))

以下示例展示了如何在实践中使用此语法。

示例 1:如何对向量使用“NOT IN”

下面的代码展示了如何选择R中向量的所有不在某个值列表中的值:

 #define numeric vector
num_data <- c(1, 2, 3, 3, 4, 4, 5, 5, 6)

#display all values in vector not equal to 3 or 4
num_data[ ! (num_data %in% c(3, 4))]

[1] 1 2 5 5 6

所有不等于3 或 4 的值都会显示在输出中。

请注意,我们可以使用相同的语法来选择向量中不在特定字符列表中的所有元素:

 #define vector of character data
char_data <- c('A', 'A', 'A', 'B', 'B', 'C', 'C', 'D', 'D', 'D')

#display all elements in vector not equal to 'A', or 'C'
char_data[ ! (char_data %in% c('A', 'C'))]

[1] “B” “B” “D” “D” “D”

任何不等于“A”或“C”的值都会显示在输出中。

示例 2:如何对数据帧使用“NOT IN”

以下代码显示了如何选择 R 中数据帧的所有行,其中某一列不等于某些值:

 #create data frame
df <- data. frame (team=c('A', 'A', 'B', 'B', 'C', 'C', 'D'),
                 points=c(77, 81, 89, 83, 99, 92, 97),
                 assists=c(19, 22, 29, 15, 32, 39, 14))

#view data frame
df

  team points assists
1 A 77 19
2 A 81 22
3 B 89 29
4 B 83 15
5 C 99 32
6 C 92 39
7 D 97 14

#select all rows where team is not equal to 'A' or 'B'
subset(df, ! (team %in% c('A', 'B')))

  team points assists
5 C 99 32
6 C 92 39
7 D 97 14

请注意,将返回团队列中没有“A”或“B”的任何行。

我们还可以使用类似的语法来选择某一列不等于某些数值的所有行:

 #create data frame
df <- data. frame (team=c('A', 'A', 'B', 'B', 'C', 'C', 'D'),
                 points=c(77, 81, 89, 83, 99, 92, 97),
                 assists=c(19, 22, 29, 15, 32, 39, 14))

#view data frame
df

  team points assists
1 A 77 19
2 A 81 22
3 B 89 29
4 B 83 15
5 C 99 32
6 C 92 39
7 D 97 14

#select all rows where team is not equal to 'A' or 'B'
subset(df, ! (points %in% c(89, 99)))

  team points assists
1 A 77 19
2 A 81 22
4 B 83 15
6 C 92 39
7 D 97 14

请注意,将返回点列中不等于 89 或 99 的所有行。

其他资源

如何在 R 中使用 %in% 运算符
如何在 R 中对数据框进行子集化
如何在 R 中对列表进行子集化

添加评论

您的电子邮箱地址不会被公开。 必填项已用*标注