【发布时间】:2017-11-22 20:03:50
【问题描述】:
我试图找出大约 20 个数据框中的列名是否相同。 20 个数据帧保存在一个列表中 (Portfolio_snapshots)。这是一组样本数据:
DF1 <- data.frame(v1=rnorm(10),v2=LETTERS[1:5])
DF2 <- data.frame(v1=rnorm(10),v2=LETTERS[1:5])
DF3 <- data.frame(v1=rnorm(10),v3=LETTERS[1:5])
Portfolio_snapshots <- list(DF1,DF2,DF3)
我试过这个:
Df_names <- lapply(Portfolio_snapshots, function(x) {
names(as.data.table(x))})
lapply(Df_names,function(x) {all.equal((Df_names[1]),(x))})
但它不会产生正确的结果。理想情况下,代码应该为前两个生成TRUE,为第三个生成FALSE。此外,如果有任何方法可以显示不匹配的列名,那么这将是一个额外的好处。
【问题讨论】:
-
你的问题可能是?
-
如果您只想要 TRUE/FALSE 答案,请尝试用
isTRUE包裹all.equal -
我试过这个 lapply(Df_names,function(x) {isTRUE(all.equal((Df_names[1]),(x)))}) 但是,它显示了所有 20 个比较的 FALSE ,而至少第一个应该是 TRUE,因为它将 Df_names[1] 与自身进行比较。
-
你没有得到一个好的答案,因为你没有给我们一个简单的可重复的例子
-
你可以在
setdiff(names(df1),names(df2),names(df3))中使用setdiff
标签: r list data.table lapply