【问题标题】:Return a Row Value given some Conditions in Rows给定行中的某些条件返回行值
【发布时间】:2018-12-20 17:49:53
【问题描述】:

当我对数据进行子集化时,我会根据某些值或跨一组行进行子集化,如下所示:

# 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. 的值

可以一步完成吗?

【问题讨论】:

    标签: r filter subset


    【解决方案1】:

    一种方法是

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

    当没有与条件匹配的值时也会注意这一点,它将返回NA

    【讨论】:

    • 好的。谢谢。但是,它不查看前七行。如果它是一个较大的数据框,那么它仍然会选择我不喜欢的 12
    • @JackArmstrong 实际上应该没关系,因为您正在获取col_to_return 的第一个值,但是我已经更新了答案,只处理前 7 行。
    • [1:7] 需要在那里实现我的目标。没有它,代码将搜索它过滤的整个数据帧。因此,如果12 的值位于[8,1] 位置,那么您的原始代码将返回位置[8,2] 中的值
    【解决方案2】:

    使用dplyr 提高可读性:

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

    应该返回你所追求的。

    【讨论】:

      猜你喜欢
      • 2020-04-29
      • 2021-03-29
      • 2018-01-04
      • 2020-06-14
      • 1970-01-01
      • 2020-06-28
      • 1970-01-01
      • 2020-07-16
      • 2015-07-01
      相关资源
      最近更新 更多