我指的是我昨天问过的question并有后续问题:
由于我意识到2个数据帧的差异是由行的排序引起的,所以我添加了以下内容:
ddd.old <- ddd.old[order(ddd.old[,"adm_route"]),]
ddd.old <- ddd.old[order(ddd.old[,"ddd"]),]
ddd.old <- ddd.old[order(ddd.old[,"atc_code"]),]
ddd.old <- data.frame(ddd.old,stringsAsFactors=FALSE)
ddd.new <- ddd.new[order(ddd.new[,"adm_route"]),]
ddd.new <- ddd.new[order(ddd.new[,"ddd"]),]
ddd.new <- ddd.new[order(ddd.new[,"atc_code"]),]
ddd.new <- data.frame(ddd.new,stringsAsFactors=FALSE)
这给了我这样的东西:
> digest(ddd.old)
[1] "e76d3d519f3a8c066597654ae312d68d"
> digest(ddd.new)
[1] "813a68bde6840e9798db771272584e7c"
> all.equal(ddd.old, ddd.new,check.attributes=TRUE)
[1] "Attributes: < Component 2: Mean relative difference: 0.006306306 >"
两个问题:
all.equal
的输出意味着什么?答案 0 :(得分:3)
all.equal
告诉您属性不同。我猜这是行名。
检查attributes(ddd.old)[[2]]
vs attributes(ddd.new)[[2]]
。排序不会更改行名称,因此您可以按不同顺序获取它们。
你可以通过以下方式消灭它们:
rownames(ddd.old) <- NULL
rownames(ddd.new) <- NULL
或者通过向data.frame
添加参数来提前步骤:
ddd.old <- data.frame(ddd.old, stringsAsFactors=FALSE, row.names=NULL)
之后哈希也应该相等。
或者从plyr包中使用arrange
,它将删除rownames:
ddd.new <- read.table("ddd.table.new.txt",header=TRUE,stringsAsFactors=FALSE)
ddd.old <- read.table("ddd.table.old.txt",header=TRUE,stringsAsFactors=FALSE)
ddd.new <- arrange(ddd.new, atc_code, ddd, adm_route)
ddd.old <- arrange(ddd.new, atc_code, ddd, adm_route)
all.equal(ddd.new, ddd.old)
# TRUE