2014-10-02 3 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-2-columns) – DatamineR

ответ

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

+0

? можете ли вы привести воспроизводимый пример, который показывает это? (Может быть, в вашем реальном наборе данных другая заглавная буква?) –

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

Замените 'dplyr :: mutate'' 'transform', и у вас есть базовое решение R – thelatemail

+0

Я попробовал второй вариант, но это не решает мою проблему. я новичок в r и не понимаю, как запустить первый вариант – user3386398