列名在read.table或read.csv上向左移动
最初我有这个TSV文件示例:列名在read.table或read.csv上向左移动,r,data-analysis,read.table,read.csv,R,Data Analysis,Read.table,Read.csv,最初我有这个TSV文件示例: name type qty cxfm 1C 0 d2 H50 2 g3g 1G 2 hb E37 1 nlx E45 4 因此,我使用read.csv从.tsv文件读取数据,但我总是得到以下输出: name type qty 1 cxfm 1C 0 2 d2 H50 2 3 g3g 1G 2 4
name type qty
cxfm 1C 0
d2 H50 2
g3g 1G 2
hb E37 1
nlx E45 4
因此,我使用read.csv从.tsv文件读取数据,但我总是得到以下输出:
name type qty
1 cxfm 1C 0
2 d2 H50 2
3 g3g 1G 2
4 hb E37 1
5 nlx E45 4
而不是得到这个:
name type qty
1 cxfm 1C 0
2 d2 H50 2
3 g3g 1G 2
4 hb E37 1
5 nlx E45 4
你有这个想法吗?这是我用来读取文件的:
file_list<-list.files()
for (file in file_list){
if (!exists("dataset")){
dataset <- read.table(file, header = TRUE, sep = "\t", row.names = NULL, blank.lines.skip = TRUE, fill = TRUE)
names(dataset) <- c("rowID", names(dataset)[1:ncol(dataset)-1])
}
if (exists("dataset")){
temp_dataset <- read.table(file, header = TRUE, sep = "\t", row.names = NULL, blank.lines.skip = TRUE, fill = TRUE)
names(temp_dataset) <- c("rowID", names(temp_dataset)[1:ncol(temp_dataset)-1])
dataset <- rbind(dataset, temp_dataset)
rm(temp_dataset)
}
}
dataset <- unique(dataset)
write.table(dataset, file = "dataset.tsv", sep = "\t")
源CSV文件中似乎缺少列标题。这里的一个选项是保持read.csv调用不变,只需调整结果数据帧的名称:
df <- read.csv(file,
header = TRUE,
sep = "\t",
row.names = NULL,
blank.lines.skip = TRUE,
fill = TRUE,
comment.char = "",
quote = "", stringsAsFactors = FALSE)
names(df) <- c("rowID", names(df)[1:ncol(df)-1])
我必须这样做才能修复它:将row.names设置为FALSE
write.table(dataset, file = "data.tsv", sep = "\t", row.names = FALSE)
你试过row.names=False吗?@Erin我想提出这个建议,但也许他想保留行名。哦,对了!实际上,我认为row.names=1可能会起作用。这将告诉R头的第一个元素对应于csv中的第二列…我将row.names=NULL,因为我在第一列中有重复的值以避免出现此错误:不允许重复的“row.names”我这样做了,现在我在NameDataSet中出现此错误抱歉,使用这个:namesdf非常感谢,但是现在我有一个“match.namesclab,namesxi:names与以前的名称不匹配”错误,那么您的R脚本中肯定还有其他问题。如果你发布相关代码,我可能会提供帮助。将此代码放在你的问题中,而不是作为注释。从文件中读取每个数据集数据帧后,您计划如何处理它?这个代码片段显示您正在覆盖每一个,这对我来说没有太大意义。这是对原始问题的直接回答。