如果一列中的值大于另一列中的值,则交换R中列中的值

时间:2014-10-02 21:26:05

标签: r

我想编写一个代码来检查数据框中的两列并进行比较。一个应该是最高温度,另一个是最低温度。如果Tmax列的值小于Tmin,则它应该交换值。我需要对文件夹中的多个文件执行此操作。

        Date    TMAX    TMIN
1 01/01/1960  4.7353 -4.3722
2 01/02/1960  8.3800 11.0600
3 01/03/1960  3.4400 -3.5300
4 01/04/1960 -1.4300 -8.2200
5 01/05/1960 -1.9600 -5.0100
6 01/06/1960  4.5800 -6.3400
7 01/07/1960 -8.8900 -2.7300

运行代码后,它应该产生类似

的东西
        Date    TMAX    TMIN
1 01/01/1960  4.7353 -4.3722
2 01/02/1960 11.0600  8.3800
3 01/03/1960  3.4400 -3.5300
4 01/04/1960 -1.4300 -8.2200
5 01/05/1960 -1.9600 -5.0100
6 01/06/1960  4.5800 -6.3400
7 01/07/1960 -2.7300 -8.8900

3 个答案:

答案 0 :(得分:3)

dplyr::mutate(df, TMAX = pmax(TMAX, TMIN), TMIN = pmin(TMAX, TMIN))

或者只是

transform(df, TMAX = pmax(TMAX, TMIN), TMIN = pmin(TMAX, TMIN))

答案 1 :(得分:2)

怎么样:

df <- data.frame(TMAX=1:5,TMIN=c(2,1,6,3,4))
dfn <- df
dfn$TMAX <- pmax(df$TMIN,df$TMAX)
dfn$TMIN <- pmin(df$TMIN,df$TMAX)
##   TMAX TMIN
## 1    2    1
## 2    2    1
## 3    6    3
## 4    4    3
## 5    5    4

答案 2 :(得分:1)

(也许不是最优雅的方式)假设您的数据被称为df

check<-df[,2]>df[,3]

dfn<-df
dfn[!check,3]<-df[!check,2]
dfn[!check,2]<-df[!check,3]

更优雅的方式是:

transform(df, V2=ifelse(V2<V3,V3,V2),V3= ifelse(V3>V2,V2,V3))