R中保留的CSV订单

Xop*_*ter 8 csv r subset dataframe

我的数据顺序很重要.如果我将CSV加载到R中read.csv,那么数据帧中行的顺序是否保证与CSV 的顺序相匹配?

如果我将一堆CSV和rbind它们一起加载然后subset用来获取我感兴趣的数据怎么样?

例如:

1.csv

foo,bar
a,123
a,456
c,789
Run Code Online (Sandbox Code Playgroud)

2.csv

foo,bar
d,987
a,999
b,654
a,321
Run Code Online (Sandbox Code Playgroud)

请问以下内容:

data1<-read.csv("1.csv", header=T)
data2<-read.csv("2.csv", header=T)
all_data<-rbind(data1, data2)
filtered<-subset(all_data, foo=="a")
Run Code Online (Sandbox Code Playgroud)

... 总是产生一个filtered:

   foo  bar
1    a  123
2    a  456
3    a  999
4    a  321
Run Code Online (Sandbox Code Playgroud)

...并且此行为是否适用于任意CSV输入和过滤器?

Ter*_*ror 3

这是一个基本代码,您可以使用它来仔细检查来自read.csv和 的结果subset

read.csv与之比较readLines

read.csv这里有一个代码可以比较来自的结果readLines(函数逐行读取文件)

  library("readr" )
  library("rlist")
  file1<-file.choose() #Select your csv file1
  file2<-file.choose() #Select your csv file2

  #readLines
  input_list<-strsplit(readLines(file1),",")
  db_readLines<-data.frame(list.rbind(input_list[2:length(input_list)]))
  names(db_readLines)<-input_list[[1]]

  #readd.csv
  db_readcsv<-read.csv(file1,header = T,sep = ",")

  #Comparison
  if ((sum(db_readcsv==db_readLines)/(nrow(db_readcsv)*ncol(db_readcsv)))==1)
  {
    cat("Same data.frame")
  } else
  {
    cat("Data.frames are differents")
  }
Run Code Online (Sandbox Code Playgroud)

您可以将其与 csv 文件一起使用来比较结果并验证是否read.csv将行顺序保留为readLines.

比较subset+rbind基本过滤

关于问题的第二部分另一个简单的测试:

data1<-read.csv(file1, header=T,sep=",")
  data2<-read.csv(file2, header=T,sep=",")
  all_data<-rbind(data1, data2)
  filtered1<-subset(all_data, foo=="a")

  filtered2<-rbind(data1[data1$foo=="a",],data2[data2$foo=="a",])

  #Comparison
  if ((sum(filtered1==filtered2)/(nrow(filtered2)*ncol(filtered2)))==1)
  {
    cat("Same data.frame")
  } else
  {
    cat("Data.frames are differents")
  }
Run Code Online (Sandbox Code Playgroud)

您可以在代码中包含此类测试,但显然这是低效且多余的。