R 从数字数据框中删除字符列

R 从数字数据框中删除字符列,r,R,我有一个数据框,就像你在这里看到的 DRSi TP DOC DN date Turbidity Anions 158 5.9 3371 264 14/8/06 5.83 2246.02 217 4.7 2060 428 16/8/06 6.04 1632.29

我有一个数据框,就像你在这里看到的

     DRSi       TP        DOC        DN          date     Turbidity   Anions 
     158        5.9       3371       264        14/8/06      5.83    2246.02
     217        4.7       2060       428        16/8/06      6.04    1632.29
     181        10.6      1828       219        16/8/06      6.11    1005.00
     397        5.3       1027       439        16/8/06      5.74    314.19
     2204       81.2      11770      1827       15/8/06      9.64    2635.39
     307        2.9       1954       589        15/8/06      6.12    2762.02
     136        7.1       2712       157        14/8/06      5.83    2049.86
     1502       15.3      4123       959        15/8/06      6.48    2648.12
     1113       1.5       819        195        17/8/06      5.83    804.42
     329        4.1       2264       434        16/8/06      6.19    2214.89
     193        3.5       5691       251        17/8/06      5.64    1299.25
     1152       3.5       2865       1075       15/8/06      5.66    2573.78
     357        4.1       5664       509        16/8/06      6.06    1982.08
     513        7.1       2485       586        15/8/06      6.24    2608.35
     1645       6.5       4878       208        17/8/06      5.96    969.32
在我到达这里之前,我使用下面的代码删除了那些根本没有值或一些NA的列

    rem = NULL
    for(col.nr in 1:dim(E.3)[2]){
      if(sum(is.na(E.3[, col.nr]) > 0 | all(is.na(E.3[,col.nr])))){
        rem = c(rem, col.nr)
      }
    }
    E.4 <- E.3[, -rem]  
rem=NULL
用于(第1列:尺寸(E.3)[2]){
如果(总和(为na(E.3[,列号])>0 |全部(为na(E.3[,列号])){
rem=c(rem,col.nr)
}
}

E.4首先使用
is.character
查找所有带有class
character
的列。但是,请确保您的日期确实是
字符
,而不是
日期
因子
。否则使用
is.Date
is.factor
代替
is.character

然后只对data.frame中非字符的列进行子集,例如

df[, !sapply(df, is.character)]

我遇到了类似的问题,但上面的答案无法解决日期列的问题(这是我所需要的),因此我找到了另一个解决方案:

df[,-grep ("Date|factor|character", sapply (df, class))]

将返回你的DF,没有日期、字符和因子列。

请考虑修改你的问题的正文。目前还不是很清楚。我会选择
mydf thanky you@dickoa,使用is.numeric作为参数重写我的df,只选择那些数字列是非常有用的。或者,一种破坏性的方法:
df[sapply(df,is.character)]@shadow感谢您提供了关于首先检查是字符、因子还是日期的提示。事实上这是一个因素,所以我把is.character换成is.factor,效果很好。阿南达·马托你的例子也很好,谢谢@本影,请考虑将阴影的答案标记为接受,如果它解决了你的问题。谢谢。在哪里可以找到这个有趣的“is.Date”函数?@WD\u R:显然它不存在。。。(或者至少我再也找不到了。)您可以定义
is.Date