[R] Apply function to one specific column / Alternative to for loop

Stageexp ronjaq at gmx.net
Sat Nov 16 16:30:29 CET 2013


Hi guys, I am a total newbie to R, so I hope this isn't a totally dumb
question. I have a dataframe with a title in one row and the corresponding
values in the next rows. Let's take this example: 

test_df <- data.frame(cbind(titel = "", x = 4:5, y = 1:2))
test_df = rbind(cbind(titel="1.Test", x="", y=""), test_df,
cbind(titel="2.Test", x="", y=""), test_df, cbind(titel="3.Test", x="",
y=""), test_df)

test_df
   titel x y
1 1.Test    
2        4 1
3        5 2
4 2.Test    
5        4 1
6        5 2
7 3.Test    
8        4 1
9        5 2

What I want to have is:
   titel x y
2 1.Test 4 1
3 1.Test 5 2
5 2.Test 4 1
6 2.Test 5 2
8 3.Test 4 1
9 3.Test 5 2

In my example, the title is in every third line, but in my real data there
is no pattern. Each title has at least one line but can have x lines.

I was able to solve my problem in a for loop with the following code:
test_df$titel <- as.character(test_df$titel)
for (i in 1:nrow(test_df))
{
  if (nchar(test_df$titel[i])==0){
    test_df$titel[i]=test_df$titel[i-1]
  }
}
test_df <- subset(test_df,test_df$x!="")


The problem is, I have a lot of data and the for loop is obviously very
slow. Is there a more elegant way to achieve the same? I think I have to use
the apply function, but I don't know how to use it with just one column.




--
View this message in context: http://r.789695.n4.nabble.com/Apply-function-to-one-specific-column-Alternative-to-for-loop-tp4680566.html
Sent from the R help mailing list archive at Nabble.com.



More information about the R-help mailing list