相关疑难解决方法(0)

让rbind忽略列名的最简单方法

这只是在这里回答另一个问题.当您使用rbind两个数据框时,它会按名称而不是索引匹配列,这可能会导致意外行为:

> df<-data.frame(x=1:2,y=3:4)
> df
  x y
1 1 3
2 2 4
> rbind(df,df[,2:1])
  x y
1 1 3
2 2 4
3 1 3
4 2 4
Run Code Online (Sandbox Code Playgroud)

当然,有一些解决方法.例如:

rbind(df,rename(df[,2:1],names(df)))
data.frame(rbind(as.matrix(df),as.matrix(df[,2:1])))
Run Code Online (Sandbox Code Playgroud)

在编辑:renameplyr包中实际上并没有这样工作(虽然我认为我最初写这篇文章的时候有工作......).通过重命名来实现此目的的方法是使用SimonO101的解决方案:

rbind(df,setNames(df[,2:1],names(df)))
Run Code Online (Sandbox Code Playgroud)

也许,令人惊讶的是,

data.frame(rbindlist(list(df,df[,2:1])))
Run Code Online (Sandbox Code Playgroud)

通过索引工作(如果我们不介意数据表,那么它非常简洁),所以这是一个区别do.call(rbind).

问题是,rbind对于名称不匹配的两个数据框,最简洁的方法是什么?我知道这似乎微不足道,但这种事情最终会使代码混乱.而且我不想写一个叫做的新函数rbindByIndex.理想情况下它会是这样的rbind(df,df[,2:1],byIndex=T).

r rbind

42
推荐指数
2
解决办法
6万
查看次数

标签 统计

r ×1

rbind ×1