【问题标题】:picking a value from one column filters another column从一列中选择一个值过滤另一列
【发布时间】:2020-08-21 08:59:21
【问题描述】:

我正在处理一个大数据项目,我想过滤一列以防止与另一列一起突出显示。

例如,我想展示房屋 1,因此,我想将房屋 1 与其他 URBAN 房屋的其他价值进行比较,而不是所有房屋。

table <- data.frame(
  house=paste("House", 1:15),
  category = c("Urban", "Rural", "Suburban")
)
table
#       house category
# 1   House 1    Urban
# 2   House 2    Rural
# 3   House 3 Suburban
# 4   House 4    Urban
# 5   House 5    Rural
# 6   House 6 Suburban
# 7   House 7    Urban
# 8   House 8    Rural
# 9   House 9 Suburban
# 10 House 10    Urban
# 11 House 11    Rural
# 12 House 12 Suburban
# 13 House 13    Urban
# 14 House 14    Rural
# 15 House 15 Suburban

我试着尝试一下,但它不适合我......

table %>%
filter(house == house1) %>%
filter(category == table$house)

我希望输出看起来像这样......

#      house category
# 1  House 1    Urban
# 2  House 4    Urban
# 3  House 7    Urban
# 4 House 10    Urban
# 5 House 13    Urban

非常感谢任何建议。

【问题讨论】:

    标签: r dplyr


    【解决方案1】:

    也许你可以试试下面的基本 R 代码

    subset(df,category == category[house=="House1"])
    

    或dplyr 选项

    df %>%
       filter(category == category[house == "House1"])
    

    给了

         house category
    1   House1    Urban
    3   House3    Urban
    5   House5    Urban
    12 House12    Urban
    13 House13    Urban
    14 House14    Urban
    

    虚拟数据

    df <- structure(list(house = c("House1", "House2", "House3", "House4", 
    "House5", "House6", "House7", "House8", "House9", "House10",
    "House11", "House12", "House13", "House14", "House15"), category = c("Urban", 
    "Suburban", "Urban", "Rural", "Urban", "Suburban", "Suburban",
    "Rural", "Rural", "Suburban", "Suburban", "Urban", "Urban", "Urban",
    "Rural")), class = "data.frame", row.names = c(NA, -15L))
    

    【讨论】:

    • 这就是我正在寻找的答案!非常感谢。
    【解决方案2】:

    使用 dplyr 你可能会做这样的事情

    table %>%
      filter(category == filter(table, house=="House 1") %>% pull(category))
    

    基本上只是一个查找 House 1 类别的子查询。

    【讨论】:

      【解决方案3】:

      试试

      table %>%
      filter(category == "Urban")
      

      请记住,您需要在 filter 语句中使用引号 " "。

      【讨论】:

        【解决方案4】:

        你也可以使用match,它会返回第一个匹配的索引,你可以从中得到对应的category。

        subset(table, category == category[match('House 1', house)])
        
              house category
        1   House 1    Urban
        4   House 4    Urban
        7   House 7    Urban
        10 House 10    Urban
        13 House 13    Urban
        

        如果您想使用dplyr,请使用与filter 相同的代码:

        dplyr::filter(table, category == category[match('House 1', house)])
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-03-22
          • 1970-01-01
          • 2011-03-30
          • 2019-03-09
          • 1970-01-01
          相关资源
          最近更新 更多