繁体   English   中英

R列比较和过滤器

R column comparison and filter

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我有一个数据框,看起来像这样,以列名作为日期。

2013_11 | 2013_12 | 2014_01 | 2014_02 | 2014_03 |

 NA | NA | 3  | 3  | N  |
  2 | 2  | 3  | NA | NA |
 NA | NA | NA | NA | NA |

我需要编写某种逻辑函数,将仅过滤出我要查找的行。 我只需要拉出在2013年任何月份都没有数字的行(前两列),但DID在2014年的任何列中至少有1个数字。

因此,代码只会为我拉回第一行;

NA | NA | 3  | 3  | N  |

我找不到最有效的方法,因为我有大约800万行。

3 个回复

你可以试试

indx1 <- grep('2013', colnames(df))
indx2 <- grep('2014', colnames(df))
df[!rowSums(!is.na(df[indx1]))&!!rowSums(!is.na(df[indx2])),]
#   2013_11 2013_12 2014_01 2014_02 2014_03
#1      NA      NA       3       3       N

或者你可以使用

i1 <- Reduce(`&`, lapply(df[indx1], function(x) is.na(x)))
i2 <- Reduce(`&`, lapply(df[indx2], function(x) !is.na(x)))
df[i1 &i2,]
# 2013_11 2013_12 2014_01 2014_02 2014_03
#1      NA      NA       3       3       N

数据

df <- structure(list(`2013_11` = c(NA, 2L, NA), `2013_12` = c(NA, 2L, 
NA), `2014_01` = c(3L, 3L, NA), `2014_02` = c(3L, NA, NA), `2014_03` = c("N", 
NA, NA)), .Names = c("2013_11", "2013_12", "2014_01", "2014_02", 
"2014_03"), class = "data.frame", row.names = c(NA, -3L))

您是否考虑过使用grep。 我将创建一个函数来执行以下操作。 for循环中使用R的anyallis.naif语句。

grep_function <- function(src, condition1, condition2) {
    for(i in 1:length(src[[1]])){
        data_condition1 <- src[i, grepl(condition1, names(src))]
        data_condition2 <- src[i, grepl(condition2, names(src))]
        if(all(is.na(data_condition1) && any(!is.na(data_condition2)))) {
            // do something here to each individual observation
        } else {
            // do something for those that do not meet your criterea
        }
    }
}

示例: grep_function(your-data-here, "2013", "2014")

或者,您可以使用SQL(有点冗长,但对某些人来说更易读):

require('sqldf')

a=data.frame("2013_11"=c(NA,2,NA), "2013_12"=c(NA,2,NA), "2014_01" =c(3,3,NA),
             "2014_02" =c(3,NA,NA) ,"2014_03" =c(NA,NA,NA))

sqldf("select * from a where 
        case when X2013_11 is null then 0 else 1 end +
        case when X2013_12 is null then 0 else 1 end = 0 
        and
        case when X2014_01 is null then 0 else 1 end +
        case when X2014_02 is null then 0 else 1 end +
        case when X2014_03 is null then 0 else 1 end > 0
      ")

 X2013_11 X2013_12 X2014_01 X2014_02 X2014_03
       NA       NA        3        3       NA
1 基于自身列比较的 SQLAlchemy 过滤器

我正在为 SQLAlchemy https://docs.djangoproject.com/en/3.2/topics/db/queries/#filters-can-reference-fields-on-the-model寻找本质上等同于 Django 的 F() 表达式 我有一个模型: ...

3 多列过滤器

我有以下情况: 我想要的是:如果CG列中的任何单元格都不为空-'y',则显示A列和B列中的所有行项目。我想要如下所示: 怎么做? 干杯。 ...

4 下拉数据窗口显示列行为与过滤器的比较

我有一个包含x行数的数据窗口。 第一列(我称为“员工”)是一个下拉数据窗口,其中的数据列指向员工ID字段,显示列指向员工姓名字段。 添加行时,将根据用户的下拉选择来填充此列。 此外,筛选器应用于雇员列的DatawindowChild,以便用户可能不会选择与当前筛选器不匹配的雇员。 问 ...

5 比较值和列时的平滑过滤器为选项

在Postgres DB(9.3)中有一个表格,其中formDefinitionId是可空列。 光滑版本是2.1.0 我们在查询中有一个此过滤器 request.formDefinitionId ,其中request不过是一个带有formDefinitionId作为Option[ ...

7 jQuery比较过滤器

我有两组元素(有时)具有相应的rel和id属性: 我希望通过.get()请求加载具有匹配ID的&lt;p&gt;时出现&lt;a&gt;元素。 我想我会使用filter(),但无法使其正常工作。 我试过了 这似乎在第一个元素上起作用,但是我对filter()的理解是它应该 ...

8 使用 R 使用多列循环明智的过滤器

` 我有如上所示的数据框。 我应用了这个循环,它现在只返回产品明智的唯一值(例如过滤产品明智),我想用多个类别列过滤,例如不仅用于产品列(例如产品,分支和区域明智过滤器),任何人都可以帮助我如何通过在 R 中使用循环来做到这一点? 此代码有效但仅适用于产品列,现在我想使用多个列进行过滤。例如 ...

2020-03-08 09:59:15 1 48   r
9 R -shiny- DT:如何更新列过滤器

我想使用 DT 来允许用户修改数据集。 但是,当因子 cols 更改(通过添加或删除因子级别)时,相应的表过滤器保持不变。 在以下示例中:如果我更改了一个 Species,新的 Species 不会出现在过滤器下拉列表中。 有解决方法吗? 非常感谢! ...

2020-12-16 15:20:32 2 166   r/ shiny/ dt
10 汇总R中的多列(同时保留过滤器)

我在下面的代码中碰到了一堵砖墙。 本质上,dftable应该是一个过滤的数据框,其中包含对小部件的点击(我在每个小部件的列之间循环)。 然后,我想获得该小部件在其上处于活动状态的所有页面浏览量的总和(不是在所有页面上,因此我进行过滤以排除那些不存在的页面)。 但是,dfviews只会返 ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM