2014-10-02 157 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

相關問題