给定行中的某些条件,返回行值

时间:2018-12-20 09:39:03

标签: r filter subset

当我对数据进行子集化时,我要么基于某些值进行子集化,要么跨如下一组行:

# Subset on some values
df<-df[df$A=='some values',]
# Subset on Group of Rows
df<-df[1:10,]

但是,有没有办法将这两种方法结合起来?

我需要能够获取数据帧的前7行,然后使用条件搜索一列,并在另一列中返回值。

所以,如果我有此数据:

col_with_conditions<-c(1,2,3,4,5,1,2,3,4,5)
col_to_return<-c(10,10,10,20,20,20,10,20,10,20)
df<-data.frame(col_with_conditions,col_to_return)
col_with_conditions col_to_return
             1            10
             2            10
             3            10
             4            20
             5            20
             1            20
             2            10
             3            20
             4            10
             5            20

我想搜索值1和2,然后返回col_to_return中的第一个值。在此示例中,代码将返回10.

另一个例子:

col_with_conditions<-c(5,2,2,3,4,5)
col_to_return<-c(20,10,10,10,20,10)
df<-data.frame(col_with_conditions,col_to_return)

也将返回10

另一个例子:

col_with_conditions<-c(5,2,4,3,4)
col_to_return<-c(20,20,20,10,20)
df<-data.frame(col_with_conditions,col_to_return)

将返回20.

但是,此示例:

col_with_conditions<-c(5,3,4,3,4)
col_to_return<-c(20,20,20,10,20)
df<-data.frame(col_with_conditions,col_to_return)

应返回NA,我可以将其转换为其他地方的0。有时数据框并不总是具有这些值1 or 2.

这一步可以做到吗?

2 个答案:

答案 0 :(得分:1)

一种方法是

df$col_to_return[df$col_with_conditions[1:7] %in% c(1, 2)][1]
#[1] 10

如果没有与条件匹配的值,它将返回NA

答案 1 :(得分:1)

使用dplyr来提高可读性:

library(dplyr)
df %>% 
  head(7) %>% 
  filter(col_with_conditions %in% c(1, 2)) %>% 
  .$col_to_return %>% 
  .[1]

应该返回您想要的东西。