首页 > 解决方案 > R在检查字母顺序的列中交换值

问题描述

我正在使用 R 中的一个 HUGE data.frame。我的数据集遵循以下模式:

    +--------+------+------+------+------+
    | | Col1 | Col2 | Col3 | Col4 |
    +--------+------+------+------+------+
    | 1号线 | 43 | 一个 | 乙 | 56 |
    | 线2 | 103 | c | d | 85 |
    | 3号线 | 7 | F | E | 115 |
    | 4号线 | 8 | 克 | h | 0 |
    +--------+------+------+------+------+

我必须执行以下操作:


For each row:
    If Col2 > Col3 (check alphabetical order of the values)
        Swap values of Col 2 and Col 3

我需要以下结果:

    +--------+------+------+------+------+
    | | Col1 | Col2 | Col3 | Col4 |
    +--------+------+------+------+------+
    | 1号线 | 43 | 一个 | 乙 | 56 |
    | 线2 | 103 | c | d | 85 |
    | 3号线 | 7 | E | F | 115 |
    | 4号线 | 8 | 克 | h | 0 |
    +--------+------+------+------+------+

我为此编写了一个 for 循环,但这需要很长时间!有没有更有效的方法来用 R 做到这一点?

谢谢!

标签: rdataframe

解决方案


您可以使用转换功能。

> df
      col1 col2 col3 col4
Line1   48    a    b   56
Line2  103    c    d   85
Line3    7    f    e  115
Line4    8    g    h    0

> df <- transform(df, col2 = pmin(col2, col3), col3=pmax(col2, col3))

> df
      col1 col2 col3 col4
Line1   48    a    b   56
Line2  103    c    d   85
Line3    7    e    f  115
Line4    8    g    h    0

推荐阅读