2014-10-02 155 views
1

中的列中的值我想编写一个代码来检查数据框中的两列并对它们进行比较。一个应该是Max Temp,另一个是Min Temp。如果Tmax列的值小于Tmin,那么它应该交换这些值。我需要为文件夹中的多个文件执行此操作。如果一列中的值大于另一列的值,则交换R

 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 
+0

可能重复[如何2列之间的交换价值(http://stackoverflow.com/questions/7746567/how- to-swap-values-between-columns) – DatamineR 2014-10-02 21:58:21

回答

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 
+0

感谢您的帮助,但是这会为我的数据框添加两列。我只需要与我原始数据 – user3386398 2014-10-03 02:17:46

+0

相同的格式?你能给出一个可重现的例子来证明这一点吗? (也许大数据在你的真实数据集中是不同的) – 2014-10-03 12:02:17

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)) 
3
dplyr::mutate(df, TMAX = pmax(TMAX, TMIN), TMIN = pmin(TMAX, TMIN)) 

或者只是

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

用'transform'替换'dplyr :: mutate',你有一个基本的R解决方案 – thelatemail 2014-10-02 22:38:34

+0

我试过你的第二个选项,但是它不能解决我的问题。我是r新手,不理解如何运行第一个选项 – user3386398 2014-10-03 02:24:26

相关问题