[R] manipulating data of several columns simultaneously
Petr Savicky
savicky at cs.cas.cz
Wed Jan 18 13:58:55 CET 2012
On Wed, Jan 18, 2012 at 02:48:48AM -0800, Nerak wrote:
> Dear all,
> I have a question concerning manipulating data of several columns of a
> dataframe at the same time.
> I manage to do it for one column (with the use of the specific name for this
> column).
> In each columns, I have 60 values. But I should reorganize the values
> (because I created this as an output before and I want to compare it with an
> other dataset). I want that the value on row 2 becomes the value of row 1,
> value 3 value 2 and so on. The first value would be NA.
>
> If I would do this for 1 column (with the name depth_1), I would do it like
> this:
>
> for (t in 2:60)
> {
> results$depth[t]<-new$depth_1[t-1]
> }
>
>
> # But in my dataset I have 91 columns and I would like to find a way not
> having to write this for every column…
> # I cannot give my dataset where I’m working on so I created one just for
> trying it out and to provide a reproducible example. I created a data frame
> ‘new’ with 26 columns and 60 rows. I named the columns all in a similar way
> using ‘C <- seq(1,13.5,0.5)’. That means that all my column names are
> structured in the same way: depth_1 ; depth_1.5, depth_2; depth_2.5 and so
> on.
>
> C <- seq(1,13.5,0.5)
>
> a<-c(1:60)
> b<-c(2:61)
> c<-c(3:62)
> d<-c(1:60)
> e<-c(2:61)
> f<-c(3:62)
> g<-c(1:60)
> h<-c(2:61)
> i<-c(3:62)
> j<-c(1:60)
> k<-c(2:61)
> l<-c(3:62)
> m<-c(1:60)
> n<-c(2:61)
> o<-c(3:62)
> p<-c(1:60)
> q<-c(2:61)
> r<-c(3:62)
> s<-c(1:60)
> t<-c(2:61)
> u<-c(3:62)
> v<-c(1:60)
> w<-c(2:61)
> x<-c(3:62)
> y<-c(1:60)
> z<-c(2:61)
>
> new<-data.frame(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z)
> names(new)<-c(paste('depth_',C,sep=''))
>
If you want to keep the vector of row names unchanged,
try the following.
shift <- function(x) { c(NA, x[1:(length(x)-1)]) }
new1 <- as.data.frame(lapply(new, shift))
new[c(1:5, 57:60), 1:5]
depth_1 depth_1.5 depth_2 depth_2.5 depth_3
1 1 2 3 1 2
2 2 3 4 2 3
3 3 4 5 3 4
4 4 5 6 4 5
5 5 6 7 5 6
57 57 58 59 57 58
58 58 59 60 58 59
59 59 60 61 59 60
60 60 61 62 60 61
new1[c(1:5, 57:60), 1:5]
depth_1 depth_1.5 depth_2 depth_2.5 depth_3
1 NA NA NA NA NA
2 1 2 3 1 2
3 2 3 4 2 3
4 3 4 5 3 4
5 4 5 6 4 5
57 56 57 58 56 57
58 57 58 59 57 58
59 58 59 60 58 59
60 59 60 61 59 60
Petr Savicky.
More information about the R-help
mailing list