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输入和过滤器?
这是一个基本代码,您可以使用它来仔细检查来自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)
您可以在代码中包含此类测试,但显然这是低效且多余的。