3

我有许多以 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)))

任何帮助将不胜感激。

谢谢,保罗

4

1 回答 1

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"
于 2013-10-30T17:17:39.747 回答