【问题标题】:R - extract a cell value using conditionsR - 使用条件提取单元格值
【发布时间】:2021-08-06 22:31:30
【问题描述】:

我正在尝试将我的数据框中的特定单元格值用作对象(以便以后与变量中的其他值相乘,例如,我想要 year= 2019 的 def 的内容)。我不想通过使用行/列编号(大型数据集)进行索引来引用此值。


以下代码适用于我:

def2019 <- df %>%
  subset(year =="2019") %>%
  select(def)
def2019 <- def2019[1,1]
def2019 <- as.vector(def2019$def, mode='numeric') to enable multiplication later

但是:它不是很快而且也很hackish。这个问题有更通用/优雅的解决方案吗?


MRE:

df <- tribble(~year, ~value,~def,
              "2017", 1, 0.9,
              "2017", 2, 0.9,
              "2018", 3, 1,
              "2019", 4, 1.1,
              "2019", NA, 1.1,
              "2019", 6, 1.1,
              "2019", 9, 1.1)

【问题讨论】:

    标签: r dataframe dplyr data.table


    【解决方案1】:

    如果我们需要一个高效的选项,请使用data.table

    library(data.table)
    def2019 <- setDT(df, key = 'year')["2019", .(def = def[1])]$def
    

    如果'year'列是integerclass

    setDT(df, key = 'year')[.(2019), .(def = def[1])]$def
    

    【讨论】:

    • @Magasinus 在您的示例中将“年份”显示为字符类型。请检查您的原始数据中是否为字符或整数类型。如果是这种情况,请使用不带引号的[2019, .(def =
    • @Magasinus 问题是行索引和列值存在冲突。我们可以通过 .(2019) 避免这种情况,因为该行索引不可用,您会得到 NA
    • @Magasinus 你试过setDT(df, key = 'year')[.(2019), .(def = def[1])]$def更新
    • 在您的调整中,您在j 中指定.(2019) 而不是在i
    • 结合您编辑的评论,这行得通。非常感谢。为了清楚起见,我将删除我的 cmets。 (没错,一开始我把行/列搞混了)。
    猜你喜欢
    • 2015-11-12
    • 2020-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-08
    • 1970-01-01
    相关资源
    最近更新 更多