【问题标题】:How to filter rows in R data frame with multiple pairs of column values如何过滤具有多对列值的R数据框中的行
【发布时间】:2021-10-29 08:33:28
【问题描述】:

我有一个经济数据数据框,其中包括婴儿死亡率和世界地区。我提取了每个区域的异常值。

                         income infant   region oil
Saudi.Arabia               1530  650.0     Asia yes
Afganistan                   75  400.0     Asia  no
Libya                      3010  300.0   Africa yes
Zambia                      310  259.0   Africa  no
Guinea                       79  216.0   Africa  no
Burma                        73  200.0     Asia  no

我有 (1) 异常值的值和 (2) 每个值对应区域的名称。

> out$out # values
[1] 300.0 170.0 650.0 400.0  44.8  43.3
> out$names[out$group] # name of region corresponding to each outlier
[1] "Africa"   "Americas" "Asia"     "Asia"     "Europe"   "Europe" 

我现在想为每个值对对应的行过滤数据框。例如。我想要 infant 值为 170 且 region 为美洲的行的行名。我不能使用列值在两个列表中的联合条件,因为还有其他行具有相同的值但不同的组(因为它们不是其组中的异常值)。

我知道我可以分两步完成此操作,但我想知道 R 中是否有更优雅的解决方案来执行此操作。

提前非常感谢!

【问题讨论】:

  • 如果您以易于传输的格式提供数据,我们可以进一步提供帮助。首先想到的是将 out 转换为命名列表,然后您可以轻松地将值与区域匹配

标签: r tidyverse


【解决方案1】:
df <- data.frame(income = c(1530, 75, 3010, 310, 79, 73), 
                 infant = c(650, 400, 300, 259, 216, 200), 
                 region = c("Asia", "Asia", "Africa", "Africa", "Africa", "Asia"), 
                 oil = c("yes", "no", "yes", "no", "no", "no"), 
                 row.names = c("Saudi.Arabia", "Afganistan", "Libya", 
                              "Zambia", "Guinea", "Burma"))

df

#               income infant region oil
# Saudi.Arabia   1530    650   Asia yes
# Afganistan       75    400   Asia  no
# Libya          3010    300 Africa yes
# Zambia          310    259 Africa  no
# Guinea           79    216 Africa  no
# Burma            73    200   Asia  no

x <- c(300.0, 170.0, 650.0, 400.0,  44.8,  43.3)
y <- c("Africa",   "Americas", "Asia",     "Asia",     "Europe",   "Europe")


df[paste0(df$infant, df$region) %in% paste0(x, y),]

#               income infant region oil
# Saudi.Arabia   1530    650   Asia yes
# Afganistan       75    400   Asia  no
# Libya          3010    300 Africa yes

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-11-19
    • 1970-01-01
    • 2017-08-15
    • 2021-06-05
    • 2020-06-15
    • 1970-01-01
    • 2018-08-07
    相关资源
    最近更新 更多