R按字母顺序检查列中的交换值

R按字母顺序检查列中的交换值,r,dataframe,R,Dataframe,我正在使用R中的一个巨大data.frame。我的数据集遵循以下模式: +-------+------+------+------+------+ | | Col1 | Col2 | Col3 | Col4 | +-------+------+------+------+------+ | Line1 | 43 | a | b | 56 | | Line2 | 103 | c | d | 85 | | Li

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

+-------+------+------+------+------+ | | Col1 | Col2 | Col3 | Col4 | +-------+------+------+------+------+ | Line1 | 43 | a | b | 56 | | Line2 | 103 | c | d | 85 | | Line3 | 7 | F | E | 115 | | Line4 | 8 | g | h | 0 | +-------+------+------+------+------+ 我需要以下结果:

+-------+------+------+------+------+ | | Col1 | Col2 | Col3 | Col4 | +-------+------+------+------+------+ | Line1 | 43 | a | b | 56 | | Line2 | 103 | c | d | 85 | | Line3 | 7 | E | F | 115 | | Line4 | 8 | g | h | 0 | +-------+------+------+------+------+ +-------+------+------+------+------+ || Col1 | Col2 | Col3 | Col4| +-------+------+------+------+------+ |第1行| 43 | a | b | 56| |第2行| 103 | c | d | 85| |第3行| 7 | E | F | 115| |线路4 | 8 | g | h | 0| +-------+------+------+------+------+ 我为此写了一个for循环,但它需要很长时间!有没有一种更有效的方法来实现这一点


谢谢大家!

这可能不是最有效或最快的解决方案,但在我的计算机上使用1E8行不到90秒:

set.seed(123)
第1区:159临70
#>2:179 L o 159
#>3:14 w O 168
#>4:195 K H 193
#>5:170 Rx116
#>        ---                    
#>99999996:117华氏163度
#>99999997:82问179
#>99999999 8:128 t U 60
#>999999999:40xO79
#>100000000:185 E o 133
系统时间({
df[,`:=`(Col2=fifelse(Col2用户系统运行时间
#>  17.326   0.368  17.694
df[]
#>Col1 Col2 Col3 Col4
#>1:159升70
#>2:179 L o 159
#>3:14西168
#>4:195香港193
#>5:170 Rx116
#>        ---                    
#>99999996:117 F O 163
#>99999997:82问179
#>99999999 8:128 t U 60
#>999999999:40×79
#>100000000:185 E o 133

由(v0.3.0)于2020-06-04创建,您可以使用转换功能

> 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
>df
col1 col2 col3 col4
第1行48 a b 56
线路2 103 c d 85
第3行7 f e 115
线路4 8 g h 0
>df-df
col1 col2 col3 col4
第1行48 a b 56
线路2 103 c d 85
第3行7 e f 115
线路4 8 g h 0

超级简单!非常感谢你!非常感谢。我在Mac中安装data.table时遇到问题。但问题已经解决了。
> 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