[R] manipulating data of several columns simultaneously

Nerak nerak.t at hotmail.com
Wed Jan 18 11:48:48 CET 2012


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=''))

#I don't know if I may create a now dataframe that's empty and then binding
my results to it? Or should I create a dataframe with already one column
with the amount of rows that I will have in my new dataset? #results <-
data.frame()                     is what I would use to create an empty
dataframe but that gives some problems when I want to add other columns
because the length is different.
results <- data.frame(time=1:60)
### I use n in 2:27 because this needs to be done on column 2 till column
27, not on column 1
for (n in 2:27)
{

# I don’t know if I should indicate that there should be created an new
variable with 60 rows? I saw people doing it in a script, but it didn’t seem
necessary in an other script that was similar to it and I made myself…
# results$newdepth<-(1:60)
#next line I also don’t know if I should give it. If I did this whole thing
for only 1 column, the firs row was NA without asking for it.

results$newdepth[1,n]<-NA

for (t in 2:60)
{
results$newdepth[t,n] <- new[t-1,n]
} 
results<- cbind(results, results$newdepth)
}

names(results) <- c(names(results)[c(1)],paste('newdepth_',C,sep=''))
#for example:
results$newdepth_1.5

I hope someone can help me with this… I hope I gave enough information? I
think there should be an easier manner but I really have no other idea.
I’m also wondering if it’s possible not using column numbers in a function,
but the name if those are structured in the same way? Eg. depth_’followed by
a number’ If you want for example to do something with the columns depth_1,
depth_1.5, depth_2, depth_2.5, depth_3 … belonging to a dataframe with also
other columns not related with the name depth (Like here, there is also the
column time). I’m hoping there is something useful for that.

Many thanks,
Nerak


--
View this message in context: http://r.789695.n4.nabble.com/manipulating-data-of-several-columns-simultaneously-tp4306278p4306278.html
Sent from the R help mailing list archive at Nabble.com.



More information about the R-help mailing list