【问题标题】:How to swap in R? [duplicate]如何在 R 中交换? [复制]
【发布时间】:2015-12-14 09:38:52
【问题描述】:

我有一个如下所示的数据集,如果一个变量中的值大于另一个,我想交换。

数据

   start_year   end_year
    1991         1995
    1994         1990
    1997         1999
    1994         1995
    1995         1995
    1996         1991

我想交换start_year 大于end_year 的行。

预期输出:

   start_year   end_year
    1991         1995
    1990         1994
    1997         1999
    1994         1995
    1995         1995
    1991         1996

试过了:

data_created = if(data$start_year > data$end_year, data$start_year == data$end_year & 
   data$end_year == data$start_year, data$start_year == data$start_year & 
   data$end_year == data$end_year)

请以这种方式帮助我。

【问题讨论】:

    标签: r


    【解决方案1】:

    您可以使用?pmax?pmin 计算年份的元素最大值和最小值。结合transfrom,这将是:

    transform(df, 
      start_year = pmin(start_year, end_year), 
      end_year = pmax(start_year, end_year))
    #  start_year end_year
    #1       1991     1995
    #2       1990     1994
    #3       1997     1999
    #4       1994     1995
    #5       1995     1995
    #6       1991     1996
    

    【讨论】:

      【解决方案2】:

      您可以为此使用applysort

      放:

      t(apply(df, 1, sort))
      

      这将逐行对数据进行排序(apply 中的 1 参数表示“按行”)。

      【讨论】:

      • 如果存在其他列,这将变得很糟糕,尤其是当这些列不是 numeric 时,因为 applydata.frames 转换为 matrix
      • 很容易将带有df[, c("start_year", "end_year")] 的列隔离,然后将cbind 重新插入。或者甚至只是将这些列更改为一行的子集。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多