【问题标题】:How to duplicate columns in a data frame如何复制数据框中的列
【发布时间】:2015-09-10 14:28:18
【问题描述】:

有没有不使用 for 循环的有效方法来复制数据框中的列?例如,如果我有以下数据框:

  Var1 Var2
1    1    0
2    2    0
3    1    1
4    2    1
5    1    2
6    2    2

并且我指定列 Var1 应该重复两次,列 Var2 应该重复三次,那么我想得到以下内容:

  Var1 Var1 Var2 Var2 Var2
1    1    1    0    0    0
2    2    2    0    0    0
3    1    1    1    1    1
4    2    2    1    1    1
5    1    1    2    2    2
6    2    2    2    2    2

任何帮助将不胜感激!

【问题讨论】:

    标签: r dataframe


    【解决方案1】:

    我们可以复制列名 (rep),将其用作复制列的索引。默认情况下,data.frame 列只能有唯一的列名,因此它将使用make.unique.1.2 作为后缀添加到“df2”中重复的列名。如果我们不想这样,我们可以删除带有sub 的后缀部分。

    df2 <- df1[rep(names(df1), c(2,3))]
    names(df2) <- sub('\\..*', '', names(df2))
    df2
    #  Var1 Var1 Var2 Var2 Var2
    #1    1    1    0    0    0
    #2    2    2    0    0    0
    #3    1    1    1    1    1
    #4    2    2    1    1    1
    #5    1    1    2    2    2
    #6    2    2    2    2    2
    

    或者正如@Frank在cmets中提到的,我们也可以这样做

    `[.noquote`(df1,c(1,1,2,2,2))
    

    【讨论】:

    • 你的意思是`[.noquote`(df1,c(1,1,2,2,2))
    • @Frank 这是一种独特的方式。你能把它作为答案发布吗
    • :) 不,这只是个玩笑。我认为 R Core 很有可能在接下来的几个版本中打破它。这就是 `[.listof` 发生的事情,自 3.2.0 以来(我认为)它的功能为零(尽管它以前做了 `[.noquote` 在这里所做的事情)。
    • @akrun 再次非常感谢您!这确实大大简化了我的代码。
    猜你喜欢
    • 1970-01-01
    • 2018-07-12
    • 2018-12-02
    • 2017-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-21
    相关资源
    最近更新 更多