首页 文章

丢弃与条件R不匹配的数据帧

提问于
浏览
1

我有一个310 data.frames的列表, mrns[[i]] ,我根据因子的值 mrns[[i]]$ar.cat 进行子集化 . 我能够以一种方式使用它们的子集,使那些与条件不匹配的data.frames留下0观察,但我希望代码只删除这些data.frames而不是留在新的列表为空 .

我的代码是:

arlow <- lapply(mrns, function(x) subset(x, x$ar.cat[1] == "Arousals Index: LOW"))

这给了我:

length(arlow)
[1] 310

当我看到 arlow 列表的内容时,我看到了不符合条件的data.frames:

[[98]]
[1] raw.Number         raw.Reading_Status raw.Month          raw.Day            raw.Year          
[6] raw.Hour           raw.Minute         raw.Systolic       raw.Diastolic      raw.MAP           
[11] raw.PP             raw.HR             raw.Event_Code     raw.Edit_Status    raw.Diary_Activity
[16] na.strings         raw.facility       raw.lastname       raw.firstname      raw.id            
[21] raw.hookup         raw.datetime       raw.mrn            unis               ar.value          
[26] ar.cat             ID                 avg.hr.prhr        avg.sys.prhr       avg.dias.prhr     
[31] avg.map.prhr       avg.pp.prhr        time               time_60            raw.Minutee       
<0 rows> (or 0-length row.names)

假设只有我的310 mrns[[i]] data.frames中的180个符合 x$ar.cat[1] == "Arousals Index: LOW" 条件,我希望 length(arlow) 的结果等于180 .

任何人都有关于如何删除这些数据的建议 . 框架与条件不匹配?

谢谢!

4 回答

  • 1

    那个怎么样

    arlow <- lapply( lapply(mrns, function(x) subset(x, x$ar.cat[1] == "Arousals Index: LOW")), function(y) nrow(y) >0)
    

    首先,您过滤掉您所做的操作,然后仅使用数据框架 .

  • 2

    所以你想从 arlow 中删除 NULL

    尝试:

    arlow <- arlow[[!is.null(arlow)]]
    

    如:

    lst <- list(data.frame(x=1:10,y=rnorm(10)), NULL, data.frame(x=1:10,y=rnorm(10)))
    length(lst)
    # [1] 3
    
    result <- lst[[!is.null(lst)]]
    length(result)
    # [1] 2
    

    这是another way

    result <- Filter(Negate(is.null), lst)
    length(result)
    # [1] 2
    
  • 0

    编辑:实际上,我的回答没有多大意义 . 我没有在你想要的每个数据框中进行子集化 . 不过,我仍然认为which()对没有NA和NULL值的子集很有用 .

    mrns[which(sapply(1:length(mrns), function(x) mrns[x]$ar.cat == "Arousals Index: LOW"))]
    

    此解决方案测试类别(ar.cat)是否对数据框列表中的每个数据框都有“唤醒索引:低”的答案 . 生成的向量应该有320个元素,其中满足条件的元素为真 . 现在我们使用which()来获取真值的索引 . 这些索引应该忽略我们生成的向量中出现的任何NULL或NA值 . 作为最后一步,我们使用我们想要的索引对数据帧列表进行子集化 .

  • 1

    感谢大家的回应!我发现添加了以下代码并给了我正在寻找的东西 .

    > arlow <- arlow[sapply(arlow, function(x) dim(x)[1]) > 0]
    > length(arlow)
    [1] 103
    

相关问题