我有许多数据文件,我将其作为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)))
非常感谢任何帮助。
谢谢, 保罗
答案 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"