这是对另一个问题的回答.当输入两个数据帧时,它会按名称而不是索引匹配列,这可能会导致意外行为:

> 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

当然,也有变通办法.例如:

rbind(df,rename(df[,2:1],names(df)))
data.frame(rbind(as.matrix(df),as.matrix(df[,2:1])))

编辑:plyr软件包中的rename实际上不是这样工作的(尽管我最初写这篇文章时以为它能工作…).重命名的方法是使用SimonOplyr的解决方案:

rbind(df,setNames(df[,2:1],names(df)))

而且,也许令人惊讶,

data.frame(rbindlist(list(df,df[,2:1])))

按索引工作(如果我们不介意数据表,那么它非常简洁),所以这是do.call(rbind)之间的差异.

问题是,对于两个名称不匹配的数据帧,最简洁的方法是什么?我知道这看起来很琐碎,但这类事情最终会导致代码混乱.我不想写一个名为rbindByIndex的新函数.理想情况下应该是rbind(df,df[,2:1],byIndex=T)左右.

推荐答案

你可能会在这里找到setNames个...

rbind(df, setNames(rev(df), names(df)))
#  x y
#1 1 3
#2 2 4
#3 3 1
#4 4 2

我怀疑您的实际用例要复杂一些.当然,您可以在第一个参数setNames中按照自己的意愿对列进行重新排序,只需在第二个参数中使用names(df),以便重新排序的列的名称与原始列匹配.

R相关问答推荐

如果窗口在CLARME或集团之外,则有条件领先/滞后滚动总和返回NA

在ggplot Likert条中添加水平线

带有gplot 2的十字舱口

在值和NA的行顺序中寻找中断模式

R中具有gggplot 2的Likert图,具有不同的排名水平和显示百分比

有没有一个R函数允许你从一个数字变量中提取一个数字,而不考虑它的位置(不仅仅是第一个或最后一个数字?

使用geom_segment()对y轴排序

R—将各种CSV数字列转换为日期

从外部文件读取多个值作为字符向量

将. xlsx内容显示为HTML表

如何通过ggplot2添加短轴和删除长轴?

根据列表中项目的名称合并数据框和列表

使用gt_summary是否有一种方法来限制每个变量集进行配对比较?

如何在Quarto中使用美人鱼图表中的标记来加粗文本

R中的Desolve:返回的导数数错误

将边列表转换为路径长度列表

具有由向量定义的可变步长的序列

使用显式二元谓词子集化sfc对象时出错

通过分析特定列中的字符串在数据框中创建新的行和列

使用相对风险回归计算RR