R:如何将行名称设置为 read.table() 中的最后一列
R: How to set the row names to the last column in read.table()
如果行名在第一列,我通常使用 dat = read.table(filename, row.names=1)
。当行名在文件的最后一列时,对应的调用是什么?我试过 dat = read.table(filename, row.names=ncol(dat))
但这没有按预期工作,因为 dat
变量还不存在。
tibble
中有一个函数可以做到这一点 column_to_rownames
dat <- read.table(filename)
dat <- tibble::column_to_rownames(dat, var = "target")
这提供了使用列名的好处,源中列的顺序不太相关。
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)
我个人只是将 header 行剪切并粘贴到顶部的正确位置。然后,与数据管道人员讨论为什么 header 出现在文件底部。如果你想要一个 R 解决方案,我可以提供以下代码。
我认为使用 read.table
或 read.csv
没有什么好的方法可以做到这一点。这些函数设计为 header 位于文件顶部。您可以尝试以下方法:
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)
如果行名在第一列,我通常使用 dat = read.table(filename, row.names=1)
。当行名在文件的最后一列时,对应的调用是什么?我试过 dat = read.table(filename, row.names=ncol(dat))
但这没有按预期工作,因为 dat
变量还不存在。
tibble
中有一个函数可以做到这一点 column_to_rownames
dat <- read.table(filename)
dat <- tibble::column_to_rownames(dat, var = "target")
这提供了使用列名的好处,源中列的顺序不太相关。
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)
我个人只是将 header 行剪切并粘贴到顶部的正确位置。然后,与数据管道人员讨论为什么 header 出现在文件底部。如果你想要一个 R 解决方案,我可以提供以下代码。
我认为使用 read.table
或 read.csv
没有什么好的方法可以做到这一点。这些函数设计为 header 位于文件顶部。您可以尝试以下方法:
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)