【问题标题】:Subset specific rows in a dataframe, but keeping the observations子集数据框中的特定行,但保留观察结果
【发布时间】:2021-01-08 18:27:41
【问题描述】:

我有一个看起来像这样的数据框

y = data.frame(subdel = c(1, 2, 3, 1, 57, 14, 1, 2, 57, 57, 57, 3, 1, 1, 
  31, 21, 34, 56, 12, 45, 1, 63, 31, 34), muni =  c("A01",  "A83", "A40", NA, NA, NA, NA, NA, NA, NA, NA,  "A45", "B26", "B42","B61", "B70", "B90", "C53", "C89","A45", "B26", "B42","B61", "B70"))

我期待下一个结果:

z = data.frame(subdel = c(1, 2, 3, 57, 57, 57, 57, 3, 1, 1, 31, 21, 34, 56, 12, 45, 1, 63, 31, 34), muni =  c("A01",  "A83", "A40", NA, NA, NA, NA,  "A45", "B26", "B42","B61", "B70", "B90", "C53", "C89", "A45", "B26", "B42","B61", "B70"))

我想将subdel == 57muni == NA 匹配,但是,如您所见,保留数据框中的所有其他观察结果。

任何帮助将不胜感激。

【问题讨论】:

  • x == NA 永远不会给你你想要的。 1==NANA==NA"A"==NA都是NA,不分真假。检查它的规范方法是is.na(muni)
  • 您可以创建一个键来匹配它们,然后合并向量。使用 data.table 它会是这样的:'setDT(subdel)[subdel==57, id:=1]' and 'setDT(muni)[is.na(muni), id:=1]' and 'merge (subdel, muni, all.x=T, all.y=T, by=c("id"))'

标签: r dataframe subset rows


【解决方案1】:

我们可以将subset 与逻辑条件一起使用,即检查'muni' (is.na(muni)) 和(&) 中的NA,其中'subdel' 为57 (subdel == 57) 或所有其他非-NA 来自“muni”的元素 (!is.na(muni))

subset(y, is.na(muni) & subdel == 57 | !is.na(muni))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多