【问题标题】:Drop R data.frame columns based on Row Value根据行值删除 R data.frame 列
【发布时间】:2017-06-05 16:46:40
【问题描述】:

我有一个这样的数据框设置:

dfRiskChanges <<- data.frame(-1, -1, -1, -1, -1, -1, -1, -1)
colnames(dfRiskChanges) <<- c('Funcational', 'Steroid', 'HxCHF', 'SOB',
                            'HxCOPD', 'Smoker', 'DMAll', 'HTNMed')

然后我用实数替换适用的 dataFrame 值,因此 dataFrame 的最终版本可能是:

Funcational Steroid HxCHF SOB HxCOPD   Smoker    DMAll        HTNMed
-1          -1      -1     -1   -1        -1        1.983131    -1 0.6438011

现在我想删除值为 -1 的所有列。

我一直在尝试这样的事情:

dfRiskChanges.new <- dfRiskChanges[dfRiskChanges$units != -1, ]

dfRiskChanges.new <<- dfRiskChanges %>% filter(units != -1) 

dfRiskChanges %>% select_if(function(col) all(col != -1))

一切都没有成功。任何帮助将不胜感激!

【问题讨论】:

  • 你为什么这么用&lt;&lt;-
  • 列的长度会一直是1吗?
  • dfRiskChanges &lt;- t(dfRiskChanges); t(dfRiskChanges[dfRiskChanges[,1] != -1, ])

标签: r dataframe shiny


【解决方案1】:

让我们添加另一个具有不同值的列:

>dfRiskChanges$NoSmoke=0
> dfRiskChanges
  Funcational Steroid HxCHF SOB HxCOPD Smoker DMAll HTNMed NoSmoke
1          -1      -1    -1  -1     -1     -1    -1     -1       0

接下来,只返回不包含 -1 的列:

> df2=dfRiskChanges[!grepl(-1,dfRiskChanges)] #picks out all columns that don't contain -1
> df2
  NoSmoke
1       0

【讨论】:

  • 我将您示例中的 0 更改为 -1 并且效果很好!非常感谢。
【解决方案2】:

使用dplyr 中的select_if 函数,我稍微修改了您的代码,如下所示。

dfRiskChanges <- data.frame(
  'Funcational' = -1,
  'Steroid' = -1,
  'HxCHF' = -1,
  'SOB' = -1,
  'HxCOPD' = -1, 
  'Smoker' = 1.983131,
  'DMAll' = -1,
  'HTNMed' = 0.6438011
  )

library(dplyr)
dfRiskChanges %>% select_if(function(col) sum(col) != -1)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-21
    • 2020-02-04
    • 2015-11-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多