split characters into two variables in data frame

r, reshape2

Solution

`substr` is another way to do it.

> variable <- c(rep("A1", 4), rep("A2", 4), rep("B1", 4))
> data.frame(treatment=substr(variable, 1,1), time=as.numeric(substr(variable,2,2)))
   treatmen time
1         A    1
2         A    1
3         A    1
4         A    1
5         A    2
6         A    2
7         A    2
8         A    2
9         B    1
10        B    1
11        B    1
12        B    1

Problem

Let's say I have a vector of variables like this: ``` >variable [1] "A1" "A1" "A1" "A1" "A2" "A2" "A2" "A2" "B1" "B1" "B1" "B1" ``` and I want to covert this into into a data frame like this: ``` treatment time 1 A 1 2 A 1 3 A 1 4 A 1 5 A 2 6 A 2 7 A 2 8 A 2 9 B 1 10 B 1 11 B 1 12 B 1 ``` To that end, I used reshape2's colsplit function. It rquires a pattern to split the string, but I quickly realize there is no obvious pattern to split the two characters without any space. I tried "" and got the following results: ``` > colsplit(trialm$variable,"",names=c("treatment","time")) treatment time 1 NA A1 2 NA A1 3 NA A1 4 NA A1 5 NA A2 6 NA A2 7 NA A2 8 NA A2 9 NA B1 10 NA B1 11 NA B1 12 NA B1 ``` I also tried a lookbehind or lookahead regular expression : ``` >colsplit(trialm$variable,"(?<=\\w)",names=c("treatment","time")) Error in gregexpr("(?<=\\w)", c("A1", "A1", "A1", "A1", "A2", "A2", "A2", : invalid regular expression '(?<=\w)', reason 'Invalid regexp' ``` but it gave me the above error. How can I solve this problem?

Original source