pigpigmeow
2012-May-31 14:55 UTC
[R] please help! Extract the row to the new file by using if-statment
Dear all, I find some troubles about how to extact the row from csv. file by using if-statement condition. I want to extract the row if the rainfall is greater than the mean of rainfall and using the wrfta divided into 3 groups that's rainfall greater than mean -> group A ( create file group A_rain) -> groupB ( create file group B_rain) -> groupC ( create file group C_rain) rainfall less than mean -> group A ( create file group A_norain) -> groupB ( create file group B_norain) -> groupC ( create file group C_norain) my csv. file is .. Date wrfRH wrfsolar wrfwindspeed wrfrain wrftd wrfta 21/10/2010 92.97 22.11 53.27 0 1546.337861 61.00852664 22/10/2010 87.35 21.99 40.89 0 1300.408288 62.85352227 23/10/2010 88.38 21.71 28.04 0.01 1381.768284 54.80594493 24/10/2010 92.32 15.45 22.38 0.51 1113.90981 39.46573663 25/10/2010 93.42 21.59 35.5 0.52 868.4895334 28.42952321 26/10/2010 93.38 20.15 42.58 0.07 1404.722837 40.29300856 27/10/2010 89 21.66 42.3 0 1060.444918 41.86858345 28/10/2010 NA NA NA NA 1109.596721 39.84995092 29/10/2010 84.5 21.66 37.8 0 1015.801383 34.11625725 30/10/2010 84.98 22 36.27 0 839.5041209 43.44047866 31/10/2010 84.4 22.4 33.44 0 742.5284832 45.81572847 1/11/2010 80.09 22.24 38.35 0 1157.99328 45.59035293 2/11/2010 84.41 21.69 36.19 0 1075.26719 51.66310159 3/11/2010 88.55 21.22 37.73 0 1163.286504 51.34179935 4/11/2010 90.58 2.88 38.49 0.56 1022.03364 57.74352136 5/11/2010 95.17 2.46 32.22 3.48 1065.735327 57.7734991 6/11/2010 95.2 11.18 27.55 0.84 1027.066675 54.40282225 7/11/2010 89.45 20.81 24.75 0 720.9881913 57.76270824 8/11/2010 85.82 20.96 28.63 0 790.5735604 37.96771725 9/11/2010 85.02 20.96 31.94 0 703.2993511 40.62208274 my script is ..... #Import data wrfJJA_UTC06<-read.csv("JJA_UTC06_ALL.csv", header =T,sep=",") attach(wrfJJA_UTC06) if(wrfrain < a) groupA_norain<- new[wrfta>= 255 | wrfta<= 65,] groupB_norain<- new[wrfta>= 65 & wrfta<= 180,] groupC_norain<- new[wrfta>= 180 & wrfta<= 255,] else groupA_rain<- new[wrfta>= 255 | wrfta<= 65,] groupB_rain<- new[wrfta>= 65 & wrfta<= 180,] groupC_rain<- new[wrfta>= 180 & wrfta<= 255,] #save as ... write.csv(groupA_norain,"groupA_norain.csv") write.csv(groupB_norain,"groupB_norain.csv") ..... however, it gets error message. what wrong? Warning message: In if (n_wrfrain < a) groupA_norain <- new[n_wrfta >= 255 | n_wrfta <= : the condition has length > 1 and only the first element will be used my data wrfrain contains NA. what can I do?! please help! -- View this message in context: http://r.789695.n4.nabble.com/please-help-Extract-the-row-to-the-new-file-by-using-if-statment-tp4631957.html Sent from the R help mailing list archive at Nabble.com.
Rainer Schuermann
2012-May-31 16:34 UTC
[R] please help! Extract the row to the new file by using if-statment
Not sure whether I understand your data and objectives well enough but here is what I would do: To make my life easier, I used x as a variable name. I'm not using attach(). You can extract your data with something like y <- x[x$wrfta>= 255 | x$wrfta<= 65 & x$wrfrain == 0, ] y <- y[!is.na(y[5]),]> yDate wrfRH wrfsolar wrfwindspeed wrfrain wrftd wrfta 1 21/10/2010 92.97 22.11 53.27 0 1546.3379 61.00853 2 22/10/2010 87.35 21.99 40.89 0 1300.4083 62.85352 7 27/10/2010 89.00 21.66 42.30 0 1060.4449 41.86858 9 29/10/2010 84.50 21.66 37.80 0 1015.8014 34.11626 10 30/10/2010 84.98 22.00 36.27 0 839.5041 43.44048 11 31/10/2010 84.40 22.40 33.44 0 742.5285 45.81573 12 1/11/2010 80.09 22.24 38.35 0 1157.9933 45.59035 13 2/11/2010 84.41 21.69 36.19 0 1075.2672 51.66310 14 3/11/2010 88.55 21.22 37.73 0 1163.2865 51.34180 18 7/11/2010 89.45 20.81 24.75 0 720.9882 57.76271 19 8/11/2010 85.82 20.96 28.63 0 790.5736 37.96772 20 9/11/2010 85.02 20.96 31.94 0 703.2994 40.62208 Does that help? Rgds, Rainer By the way, it is better to provide the data in dput() format: x <- structure(list(Date = structure(c(2L, 4L, 5L, 6L, 7L, 8L, 9L, 10L, 11L, 12L, 13L, 1L, 3L, 14L, 15L, 16L, 17L, 18L, 19L, 20L ), .Label = c("1/11/2010", "21/10/2010", "2/11/2010", "22/10/2010", "23/10/2010", "24/10/2010", "25/10/2010", "26/10/2010", "27/10/2010", "28/10/2010", "29/10/2010", "30/10/2010", "31/10/2010", "3/11/2010", "4/11/2010", "5/11/2010", "6/11/2010", "7/11/2010", "8/11/2010", "9/11/2010"), class = "factor"), wrfRH = c(92.97, 87.35, 88.38, 92.32, 93.42, 93.38, 89, NA, 84.5, 84.98, 84.4, 80.09, 84.41, 88.55, 90.58, 95.17, 95.2, 89.45, 85.82, 85.02), wrfsolar = c(22.11, 21.99, 21.71, 15.45, 21.59, 20.15, 21.66, NA, 21.66, 22, 22.4, 22.24, 21.69, 21.22, 2.88, 2.46, 11.18, 20.81, 20.96, 20.96), wrfwindspeed = c(53.27, 40.89, 28.04, 22.38, 35.5, 42.58, 42.3, NA, 37.8, 36.27, 33.44, 38.35, 36.19, 37.73, 38.49, 32.22, 27.55, 24.75, 28.63, 31.94), wrfrain = c(0, 0, 0.01, 0.51, 0.52, 0.07, 0, NA, 0, 0, 0, 0, 0, 0, 0.56, 3.48, 0.84, 0, 0, 0), wrftd = c(1546.337861, 1300.408288, 1381.768284, 1113.90981, 868.4895334, 1404.722837, 1060.444918, 1109.596721, 1015.801383, 839.5041209, 742.5284832, 1157.99328, 1075.26719, 1163.286504, 1022.03364, 1065.735327, 1027.066675, 720.9881913, 790.5735604, 703.2993511), wrfta = c(61.00852664, 62.85352227, 54.80594493, 39.46573663, 28.42952321, 40.29300856, 41.86858345, 39.84995092, 34.11625725, 43.44047866, 45.81572847, 45.59035293, 51.66310159, 51.34179935, 57.74352136, 57.7734991, 54.40282225, 57.76270824, 37.96771725, 40.62208274), cat = c(NA, NA, 1, 1, 1, 1, NA, NA, NA, NA, NA, NA, NA, NA, 1, 1, 1, NA, NA, NA)), .Names = c("Date", "wrfRH", "wrfsolar", "wrfwindspeed", "wrfrain", "wrftd", "wrfta", "cat"), row.names = c(NA, -20L), class = "data.frame") On Thursday 31 May 2012 07:55:01 pigpigmeow wrote:> Dear all, > I find some troubles about how to extact the row from csv. file by using > if-statement condition. > I want to extract the row if the rainfall is greater than the mean of > rainfall and using the wrfta divided into 3 groups > that's > rainfall greater than mean -> group A ( create file group A_rain) > -> groupB ( create file > group B_rain) > -> groupC ( create file > group C_rain) > rainfall less than mean -> group A ( create file group A_norain) > -> groupB ( create file > group B_norain) > -> groupC ( create file > group C_norain) > my csv. file is .. > Date wrfRH wrfsolar wrfwindspeed wrfrain wrftd wrfta > 21/10/2010 92.97 22.11 53.27 0 1546.337861 61.00852664 > 22/10/2010 87.35 21.99 40.89 0 1300.408288 62.85352227 > 23/10/2010 88.38 21.71 28.04 0.01 1381.768284 54.80594493 > 24/10/2010 92.32 15.45 22.38 0.51 1113.90981 39.46573663 > 25/10/2010 93.42 21.59 35.5 0.52 868.4895334 28.42952321 > 26/10/2010 93.38 20.15 42.58 0.07 1404.722837 40.29300856 > 27/10/2010 89 21.66 42.3 0 1060.444918 41.86858345 > 28/10/2010 NA NA NA NA 1109.596721 39.84995092 > 29/10/2010 84.5 21.66 37.8 0 1015.801383 34.11625725 > 30/10/2010 84.98 22 36.27 0 839.5041209 43.44047866 > 31/10/2010 84.4 22.4 33.44 0 742.5284832 45.81572847 > 1/11/2010 80.09 22.24 38.35 0 1157.99328 45.59035293 > 2/11/2010 84.41 21.69 36.19 0 1075.26719 51.66310159 > 3/11/2010 88.55 21.22 37.73 0 1163.286504 51.34179935 > 4/11/2010 90.58 2.88 38.49 0.56 1022.03364 57.74352136 > 5/11/2010 95.17 2.46 32.22 3.48 1065.735327 57.7734991 > 6/11/2010 95.2 11.18 27.55 0.84 1027.066675 54.40282225 > 7/11/2010 89.45 20.81 24.75 0 720.9881913 57.76270824 > 8/11/2010 85.82 20.96 28.63 0 790.5735604 37.96771725 > 9/11/2010 85.02 20.96 31.94 0 703.2993511 40.62208274 > > my script is ..... > #Import data > wrfJJA_UTC06<-read.csv("JJA_UTC06_ALL.csv", header =T,sep=",") > attach(wrfJJA_UTC06) > > if(wrfrain < a) > groupA_norain<- new[wrfta>= 255 | wrfta<= 65,] > groupB_norain<- new[wrfta>= 65 & wrfta<= 180,] > groupC_norain<- new[wrfta>= 180 & wrfta<= 255,] > > > else > groupA_rain<- new[wrfta>= 255 | wrfta<= 65,] > groupB_rain<- new[wrfta>= 65 & wrfta<= 180,] > groupC_rain<- new[wrfta>= 180 & wrfta<= 255,] > > #save as ... > write.csv(groupA_norain,"groupA_norain.csv") > write.csv(groupB_norain,"groupB_norain.csv") > ..... > > > however, it gets error message. what wrong? > Warning message: > In if (n_wrfrain < a) groupA_norain <- new[n_wrfta >= 255 | n_wrfta <= : > the condition has length > 1 and only the first element will be used > > my data wrfrain contains NA. what can I do?! > please help! > > -- > View this message in context: http://r.789695.n4.nabble.com/please-help-Extract-the-row-to-the-new-file-by-using-if-statment-tp4631957.html > Sent from the R help mailing list archive at Nabble.com. > > ______________________________________________ > R-help at r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guide http://www.R-project.org/posting-guide.html > and provide commented, minimal, self-contained, reproducible code.