在R中,获取数据框的子集,其中列中的值包含在列表中

时间:2016-10-21 21:16:59

标签: r dataframe

例如,假设我有一个名为df的数据框,其中"ID"列为整数,我想抓取我"ID"中的值所在的数据框的子集向量[123,198,204,245,87,91,921].

R的语法是什么?

2 个答案:

答案 0 :(得分:1)

我相信你想要%in%功能:

df <- data.frame(ID=1:1000, STUFF=runif(1000))
df2 <- df[df$ID %in% c(123,198,204,245,87,91,921), ]

答案 1 :(得分:0)

请告诉我它是否能解决您的问题。

首先,我们需要哪个功能。

  

?其中

     

哪些指数为真?

     

描述

     

给出逻辑对象的TRUE索引,允许数组索引。

i <- 1:10

which(i < 5)
  

1 2 3 4

我们还需要%in%运算符:

?"%in%"
  

%in%是一个更直观的界面作为二元运算符,它   返回一个逻辑向量,指示是否存在匹配   左操作数。

2 %in% 1:5
  

TRUE

2 %in% 5:10
  

FALSE

并肩作战

# some starting ids
id <- c(123, 204, 11, 12, 13, 15, 87, 123)

# the df constructed with the ids
df <- data.frame(id)

# the valid ids 
valid.ids <- c(123,198,204,245,87,91,921)

# positions is a logical vector which represent for each element if it's a match or not
positions <- df$id %in% valid.ids

positions
  

[1]是,否则为假,否则为假,为真是

# BONUS
# we can easily count how many matches we have:
sum(positions)
  

[1] 4

# using the which function we get only the indices 'which' contain TRUE
matched_elements_positions <- which(positions)

matched_elements_positions
  

1 2 7 8

# last step, we select only the matching rows from our dataframe
df[matched_elements_positions,]
  

123 204 87 123