如果行名称在第一列中,我通常会使用dat = read.table(filename, row.names=1)
。当行名称在文件的最后一列时,相应的调用是什么?我尝试了dat = read.table(filename, row.names=ncol(dat))
,但由于dat
变量尚不存在,因此没有按预期工作。
答案 0 :(得分:2)
base R
选项是使用count.fields
read.table('filename.csv', sep=",",
row.names = count.fields('filename.csv', sep=",")[1], header = TRUE)
# col1 col2
#C 1 A
#F 2 B
#D 3 C
#G 4 D
df1 <- data.frame(col1 = 1:2, col2 = LETTERS[1:4],
col3 = c('C', 'F', 'D', 'G'), stringsAsFactors=FALSE)
write.csv(df1, 'filename.csv', quote = FALSE, row.names = FALSE)
答案 1 :(得分:1)
tibble
中有一个功能可以执行此操作column_to_rownames
dat <- read.table(filename)
dat <- tibble::column_to_rownames(dat, var = "target")
这提供了使用列名称的好处,源中列的顺序不太相关。
答案 2 :(得分:1)
我个人只是将标题行剪切并粘贴到顶部的正确位置。然后,与您讨论数据管道人员,了解标题出现在文件底部的原因。如果你想要一个R解决方案,我可以提供以下代码。
我认为使用read.table
或read.csv
有一种很好的方法可以做到这一点。这些函数的设计标题位于文件的顶部。您可以尝试以下方法:
library(readr)
df <- NULL
cols <- list()
line <- 0L
input <- "start"
while (input != "") {
line <- line + 1L
input <- read_lines( file, skip = line - 1L, n_max = 1L )
cols <- strsplit(input, " ")
df <- rbind(df, cols)
}
# remove the last row, which is really just the header names
df <- head(df, -1)
# now take the very last line and assign the names
names(df) <- as.character(cols)