在 R 中导入; (read.csv) 自动忽略非数字列

Posted

技术标签:

【中文标题】在 R 中导入; (read.csv) 自动忽略非数字列【英文标题】:Importing in R; (read.csv) Ignore non-numeric columns automatically 【发布时间】:2015-07-07 22:45:18 【问题描述】:

我想在 R 中导入一个包含一些非数字字段(即日期或字符串)的 tsv 文件:

num1    num2    date
1   2   2012-10-18 12:17:19
2   4   2014-11-16 09:30:23
4   11  2010-03-18 22:18:04
12  3   2015-02-18 12:55:50
13  1   2014-05-16 10:39:11
2   14  2011-05-26 20:48:54

我正在使用以下命令:

a = read.csv("C:\test\testFile.tsv", sep="\t")

我想自动忽略所有非数字值(或输入“NA”之类的内容)。并且不想提及所有要忽略的字符串列名。

我尝试了“stringsAsFactors”和“as.is”参数,没有成功。

有什么想法吗?

【问题讨论】:

这是个好主意。谢谢你。但是,同样,我们必须检查字段类型(实际情况下超过 10 个字段)。我们想要数值之间的相关性。我试过 rcorr(as.matrix(a[,1:2])) ,它适用于这种情况,但不适用于更复杂的情况。 @Alisa - 也许考虑做a <- a[sapply(a,is.numeric)] @thelatemail,完美,谢谢。 【参考方案1】:

这里有很多选择。 首先,你可以在读表的同时通知 R:

data <- read.csv("C:\test\testFile.tsv", 
sep="\t", 
colClasses=c(NA, NA, "NULL"))

如果您有许多非数字列,例如 10,您可以使用 rep 作为 colClasses=c(NA, NA, rep("NULL", 10))

其次,您可以读取所有内容并在之后处理删除(注意 stringsAsFactors):

data <- read.csv("C:\test\testFile.tsv", 
    sep="\t", stringsAsFactors = FALSE)

您可以对所有标识为字符的列进行子集化。

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

或者然后对你的 data.frame 应用破坏性方法:

  df[sapply(df, is.character)] <- list(NULL)

您可以进一步确保只剩下数字列:

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

【讨论】:

【参考方案2】:

刚刚找到这个解决方案:

a = read.csv("C:\test\testFile.tsv", sep="\t", colClasses=c(NA, NA, "NULL"))

虽然它不是完全自动的。

【讨论】:

以上是关于在 R 中导入; (read.csv) 自动忽略非数字列的主要内容,如果未能解决你的问题,请参考以下文章

如何在R中导入CSV文件? [关闭]

在 R 中导入 txt 文件,忽略前几行

R数据导入导出: read.table()和read.csv()的区别

使用lapply或for循环将多个csv文件拉入自己的R数据帧

以逗号作为小数分隔符的数据框

基于日期在 R 中导入数据