将colClasses分配给长度未知的数据框中的某些列

时间:2013-10-30 17:13:39

标签: r

我有许多数据文件,我将其作为CSV读入R中。我想在这些数据文件中指定某些列的colClasses,但数据帧的长度是未知的,因为它们包含物种丰度数据(因此,物种数量不同)。

有没有办法可以使用read.csv中的colClasses将前10个后的每一列设置为数字(所以,ncol [10]:length(df))?

这是我尝试的,但无济于事:

df <- read.csv("file.csv", header=T, colClasses=c(ncols[10], rep("numeric", ncols)))

非常感谢任何帮助。

谢谢, 保罗

1 个答案:

答案 0 :(得分:1)

我首先要使用count.fields来确定数据中有多少列。你可以在第一行做到这一点。

然后,从那里,您可以rep使用colClasses

这很难,但很有效。这是一个例子:

前几行只是为了在工作区中创建一个虚拟csv文件,因为你没有提供可重现的例子。

X <- tempfile()
cat("A,B,C,D,E,F",
    "1,2,3,4,5,6",
    "6,5,4,3,2,1", sep = "\n", file = X)

这是实际答案开始的地方。将“x”替换为下面两个地方的实际文件名。 -2是因为我们已经考虑了两列。

Y <- read.csv(X, colClasses = c(
  "numeric", "numeric", rep("character", count.fields(textConnection(
    readLines(X, n=1)), sep=",")-2)))

# Y <- read.csv("file.csv", colClasses = c(
#   "numeric", "numeric", rep(
#     "character", count.fields(readLines(
#       "file.csv", n = 1), sep = ",")-2)))

str(Y)
# 'data.frame':  2 obs. of  6 variables:
#  $ A: num  1 6
#  $ B: num  2 5
#  $ C: chr  "3" "4"
#  $ D: chr  "4" "3"
#  $ E: chr  "5" "2"
#  $ F: chr  "6" "1"