📌  相关文章
📜  根据 R 中向量中的值从 DataFrame 中选择行

📅  最后修改于: 2022-05-13 01:55:36.357000             🧑  作者: Mango

根据 R 中向量中的值从 DataFrame 中选择行

在本文中,我们将讨论如何在 R 编程语言中根据向量中的值从 DataFrame 中选择行。

方法 1:使用 %in%运算符

R 中的 %in%运算符,用于标识元素是否属于向量或数据帧。它用于执行满足条件的元素的选择。它获取该值并检查它是否存在于指定的对象中。

句法:

它根据是否找到元素返回布尔值 TRUE 或 FALSE 值。然后从 DataFrame 访问相应的元素。此方法创建 DataFrame 的子集,而不对现有 DataFrame 进行任何更改。任何特定的列可以用DF $ colname的访问,然后使用此运算符与向量匹配。



例子:

R
# declare a DataFrame
data_frame <- data.frame(col1 = c(1:7),col2 = LETTERS[1:7])
  
print ("Original DataFrame")
print (data_frame)
  
# declaring the vector
vec <- c('A','a','C')
  
# getting the subset DataFrame after 
# checking values if belonging to vector
sub_df <- data_frame[data_frame$col2 %in% vec,]
  
print ("Resultant DataFrame")
print (sub_df)


R
# declare a DataFrame
data_frame <- data.frame(
  col1 = c(1:7),col2 = LETTERS[1:7],col3 = letters[1:7])
  
print ("Original DataFrame")
print (data_frame)
  
# declaring the vector
vec <- c('a','C','D')
  
# getting the subset DataFrame after checking 
# values if belonging to vector of the 
# corresponding columns
sub_df <- rbind(data_frame[is.element(data_frame$col2, vec),],
                data_frame[is.element(data_frame$col3, vec),])
  
print ("Resultant DataFrame")
print (sub_df)


R
# declare a DataFrame
# different data type have been 
# indicated for different cols
library("data.table")
  
data_frame <- data.frame(
  col1 = c(6:9), 
  col2 = c(4.5,6.7,89.0,6.2), 
  col3 = factor(letters[1:4])
)
  
print("Original DataFrame")
print (data_frame)
  
# declaring the vector 
vec <- c(4,6)
data_frame <- setDT(data_frame, key = "col1")[J(vec)]
  
print ("Modified Dataframe")
print (data_frame)


R
# declare a DataFrame
# different data type have 
# been indicated for different 
# cols
library(dplyr)
  
data_frame <- data.frame(
  "col1" = as.character(6:9), 
  "col2" = c(4.5,6.7,89.0,6.2), 
  "col3" = factor(letters[1:4])
)
  
print("Original DataFrame")
print (data_frame)
  
# declaring the vector 
vec <- (8:11)
data_frame <- filter(data_frame, col1 %in% vec) 
  
print("Modified DataFrame")
print (data_frame)


输出

[1] "Original DataFrame"
 col1 col2
1    1    A
2    2    B
3    3    C
4    4    D
5    5    E
6    6    F
7    7    G
[1] "Resultant DataFrame"
 col1 col2
1    1    A
3    3    C

方法 2:使用 is.element运算符

这是用于检查的元件的存在于载体中或一个数据帧运算符的一个实例。 is.element(x, y) 与 x %in% y 相同。如果找到该值,它返回一个布尔逻辑值以返回 TRUE,否则返回 FALSE。

句法:

此处应用 rbind 来组合 DataFrame 的两个子集,其中,在第一种情况下,可以检查向量中的 col2 值是否存在,然后检查向量中的 col3 值。然后可以组合两个子数据帧。

例子:



电阻

# declare a DataFrame
data_frame <- data.frame(
  col1 = c(1:7),col2 = LETTERS[1:7],col3 = letters[1:7])
  
print ("Original DataFrame")
print (data_frame)
  
# declaring the vector
vec <- c('a','C','D')
  
# getting the subset DataFrame after checking 
# values if belonging to vector of the 
# corresponding columns
sub_df <- rbind(data_frame[is.element(data_frame$col2, vec),],
                data_frame[is.element(data_frame$col3, vec),])
  
print ("Resultant DataFrame")
print (sub_df)

输出

[1] "Original DataFrame"
 col1 col2 col3
1    1    A    a
2    2    B    b
3    3    C    c
4    4    D    d
5    5    E    e
6    6    F    f
7    7    G    g
[1] "Resultant DataFrame"
 col1 col2 col3
3    3    C    c
4    4    D    d
1    1    A    a

方法 3:使用 data.table 包

R 中的 data.table 包可以作为 DataFrame 的增强版本显式调用到 R 工作空间中。 R 中的 setDT() 方法用于通过引用将 DataFrame 转换为数据表。

此外,然后应用函数J(vec),它通过将 vec 元素映射到 setDT() 方法的 key 参数中传递的列索引来返回 vec 元素。它用于创建与字符向量一起涉及的表的连接。

使用这种方法时需要注意以下关键点:

  • 数据框被转换为数据表,因此,表的每个结果行都以行号标识符开头,后跟“:”
  • 根据向量的每个值检查数据帧,并根据该值打印最终输出数据帧的行。
  • 这种方法的应用可能会导致实际可用数据和获得的结果之间存在歧义。

例子:

电阻

# declare a DataFrame
# different data type have been 
# indicated for different cols
library("data.table")
  
data_frame <- data.frame(
  col1 = c(6:9), 
  col2 = c(4.5,6.7,89.0,6.2), 
  col3 = factor(letters[1:4])
)
  
print("Original DataFrame")
print (data_frame)
  
# declaring the vector 
vec <- c(4,6)
data_frame <- setDT(data_frame, key = "col1")[J(vec)]
  
print ("Modified Dataframe")
print (data_frame)

输出



[1] "Original DataFrame"  
col1 col2 col3 
1    6  4.5    a 
2    7  6.7    b 
3    8 89.0    c 
4    9  6.2    d 
[1] "Modified Dataframe"   
   col1 col2 col3 
1:    4   NA  
2:    6  4.5    a

方法 4:使用dplyr

dplyr 包提供了多种模块和方法来模拟数据操作。 dplyr 包在基础 R 中不可用,需要合并到工作空间中才能将其用作库。此包中提供了一个方法 filter() 来生成原始 DataFrame 的一个子集,其中列保持不变,行根据应用的约束进行过滤。作为操作的结果,返回条件的布尔值 TRUE 值的行是可用的。但是,如果 filter() 方法产生 NA 结果,则与其他操作一样,它被认为等效于 FALSE 布尔值,因此从结果数据帧中删除。

此方法与 %in%运算符结合使用以选择满足指示条件的行。

例子:

电阻

# declare a DataFrame
# different data type have 
# been indicated for different 
# cols
library(dplyr)
  
data_frame <- data.frame(
  "col1" = as.character(6:9), 
  "col2" = c(4.5,6.7,89.0,6.2), 
  "col3" = factor(letters[1:4])
)
  
print("Original DataFrame")
print (data_frame)
  
# declaring the vector 
vec <- (8:11)
data_frame <- filter(data_frame, col1 %in% vec) 
  
print("Modified DataFrame")
print (data_frame)

输出

[1] "Original DataFrame"  
   col1 col2 col3 
1    6  4.5    a 
2    7  6.7    b 
3    8 89.0    c
4    9  6.2    d 
[1] "Modified Dataframe" 
  col1 col2 col3 
1    8 89.0    c
2    9  6.2    d