使用read.csv跳过r中的最后一列

时间:2018-02-03 13:25:14

标签: r csv read.csv

我在那篇文章read.csv and skip last column in R但未找到我的答案,并尝试直接在答案中查看...但这不是正确的方法(感谢mjuarez获取是时候让我回到正轨。

最初的问题是:

  

我已经阅读了几篇关于如何导入csv文件的帖子   read.csv但跳过特定列。但是,所有的例子我   发现只有很少的列,所以很容易做一些事情   像:

 columnHeaders <- c("column1", "column2", "column_to_skip")
 columnClasses <- c("numeric", "numeric", "NULL")
 data <- read.csv(fileCSV, header = FALSE, sep = ",", col.names = 
 columnHeaders, colClasses = columnClasses)

所有答案都很好,但不适用于我打算做的事情。所以我问自己和他人:

  

在一个函数中,data <- read_csv(fileCSV)[,(ncol(data)-1)]   可以工作吗?

我已尝试在R的一行中试用data,前6列中的所有5列,而不是最后一列。为此,我想使用&#34; - &#34;在列数中,你认为它可能吗?我怎么能这样做?

谢谢!

4 个答案:

答案 0 :(得分:2)

在基地r中,它必须是两步操作。例如:

> data <- read.csv("test12.csv")
> data
# 3 columns are returned
          a b c
1 1/02/2015 1 3
2 2/03/2015 2 4

# last column is excluded 
> data[,-ncol(data)]
          a b
1 1/02/2015 1
2 2/03/2015 2

无法在基座data <- read.csv("test12.csv")[,-ncol(data)]中写r

但如果您知道csv中的最大列数(在我的情况下为3),那么可以写一下:

df <- read.csv("test12.csv")[,-3]
df
          a b
1 1/02/2015 1
2 2/03/2015 2

答案 1 :(得分:1)

由于data变量在调用时尚未初始化,因此无法在一行中进行。因此命令ncol(data)将触发错误。

您需要使用两行代码首先将数据加载到data变量中,然后使用data[,-ncol(data)]data[,1:(ncol(data)-1)]删除最后一列。

答案 2 :(得分:1)

首先处理作业的右侧,因此问题的这一行是:

data <- read.csv(fileCSV)[,(ncol(data)-1)]

在定义之前尝试使用data。还要注意上面所说的只是第二个字段。获得除最后一个字段之外的所有字段:

data <- read.csv(fileCSV)
data <- data[-ncol(data)]

如果您知道最后一个字段的名称,说它是lastField,那么这个工作原理并且与上面的代码不同,它不读取整个文件,然后删除最后一个字段,而只读取除了字段以外的字段最后。它也只有一行代码。

read.csv(fileCSV, colClasses = c(lastField = "NULL"))

如果您不知道最后一个字段的名称但是您知道有多少字段,请说n,那么其中任何一个都可以使用:

read.csv(fileCSV)[-n]

read.csv(fileCSV, colClasses = replace(rep(NA, n), n, "NULL"))

在没有先读取最后一个字段的情况下执行此操作的另一种方法是首先读取标题和第一行以计算字段数(假设所有记录具有相同的数字)然后使用该字符重新读取文件

n <- ncol(read.csv(fileCSV, nrows = 1))

使用涉及n的前两个陈述之一。

答案 3 :(得分:1)

使用dplyr不是单一功能,而是至少一行,(免责声明:我从不使用dplyrmagrittr,因此使用这些库必须存在更优化的解决方案)

library(dplyr)
dat = read.table(fileCSV) %>% select(., which(names(.) != names(.)[ncol(.)]))