【问题标题】:R Colnames and Colsums converting logical to numericR Colnames 和 Colsums 将逻辑转换为数字
【发布时间】:2016-05-09 14:13:50
【问题描述】:

请检查下面的示例代码,我在其中创建了具有一些 NA 值的数据框。我的colnames(test)[colSums(is.na(test))>0]会给我具有 NA 值的列的名称。我的问题是,当我对列名进行子集化时,我应该为子集提供一个数字或逻辑值,但我注意到我的 colSums 给了我两个输出,一个是逻辑的,另一个是列本身的名称。 colnames 如何只使用我的 colSums 的逻辑部分??

test <- data.frame(matrix(rnorm(50), nrow = 5, ncol = 10))
colnames(test) <-c("xOne", "xtwo", "x3",    "x4","x5","xsix","x7","x8","xnine","x10")
test$x5[3:4] <-NA
colnames(test)[colSums(is.na(test))>0]

这是 colSums(is.na(test))>0 的输出

xOne  xtwo    x3    x4    x5  xsix    x7    x8 xnine   x10 
FALSE FALSE FALSE FALSE  TRUE FALSE FALSE FALSE FALSE FALSE

【问题讨论】:

  • 你看到的是一个带有名称属性的逻辑向量。见str(colSums(is.na(test))&gt;0)
  • 是的,正如文档所说,它仍然只返回一个逻辑值向量。它只是一个命名向量,所以这就是您看到输出的原因。这不会影响您的矢量,它只是矢量的一个特征,您可以为每个项目命名。
  • 谢谢两位。我现在知道逻辑向量的名称特征,以前不知道。

标签: r


【解决方案1】:

第一行是名称属性,显示每个结果对应的命名列

> attributes(colSums(is.na(test))>0)
$names
 [1] "xOne"  "xtwo"  "x3"    "x4"    "x5"    "xsix"  "x7"    "x8"    "xnine" "x10"  

【讨论】:

    【解决方案2】:

    实际上唯一的输出是逻辑向量。您可以忽略名称。 不过,如果你不想要这些名字,你可以试试:

    as.logical(is.na(colSums(test)))
    

    请注意,我对原来的功能做了一点修改。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-14
      • 1970-01-01
      • 2019-11-04
      • 2021-08-05
      • 2018-01-05
      相关资源
      最近更新 更多