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

时间:2015-07-07 22:45:18

标签: r csv import

我想在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"参数没有成功。

有什么想法吗?

2 个答案:

答案 0 :(得分: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)

答案 1 :(得分:0)

刚刚找到了这个解决方案:

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

虽然不是完全自动的。