Displaying 5 results from an estimated 5 matches for "29_log".
Did you mean:
1_log
2018 May 11
3
add one variable to a data frame
Hi All,
I have a data frame dat1:
dat1 <-data.frame(N=seq(1, 12,1), B=c("29_log","29_log", "29_log", "27_cat", "27_cat",
"1_log", "1_log", "1_log", "1_log", "1_log",...
2018 May 11
0
add one variable to a data frame
Hi,
Here's one way to approach it, using the coercion of factor to numeric.
Note that I changed your data.frame() statement to avoid coercing
strings to factors, just to make it simpler to set the levels.
dat1 <-data.frame(N=seq(1, 12,1), B=c("29_log","29_log", "29_log",
"27_cat", "27_cat", "1_log", "1_log", "1_log", "1_log", "1_log",
"3_cat", "3_cat"), stringsAsFactors=FALSE)
dat1$C1 <- as.numeric(factor(dat1$B, levels=unique...
2018 May 11
3
add one variable to a data frame
...nown senders or unexpected emails.]
Hi,
Here's one way to approach it, using the coercion of factor to numeric.
Note that I changed your data.frame() statement to avoid coercing strings to factors, just to make it simpler to set the levels.
dat1 <-data.frame(N=seq(1, 12,1), B=c("29_log","29_log", "29_log", "27_cat", "27_cat", "1_log", "1_log", "1_log", "1_log", "1_log", "3_cat", "3_cat"), stringsAsFactors=FALSE)
dat1$C1 <- as.numeric(factor(dat1$B, levels=unique...
2018 May 11
2
add one variable to a data frame
...no concern here, btw). But the
price for this efficiency is that it depends completely on the data beig
grouped in order as the OP showed. It will fail if this is not the case.
If, for example, the data appeared as:
> set.seed(1234)
> ix <- sample(1:12)
> dat1[ix,]
N B
2 2 29_log
7 7 1_log
11 11 3_cat
6 6 1_log
10 10 1_log
5 5 27_cat
1 1 29_log
12 12 3_cat
3 3 29_log
8 8 1_log
4 4 27_cat
9 9 1_log
then Don's solution will still work. The above doesn't.
So this emphasizes the importance of precisely and completely specifying
the nature of you...
2018 May 11
0
add one variable to a data frame
Sarah's solutions are good, and here's another, even more basic:
tmp1 <- unique(dat1$B)
tmp2 <- seq_along(tmp1)
dat1$C <- tmp2[ match( dat1$B, tmp1) ]
> dat1
N B C
1 1 29_log 1
2 2 29_log 1
3 3 29_log 1
4 4 27_cat 2
5 5 27_cat 2
6 6 1_log 3
7 7 1_log 3
8 8 1_log 3
9 9 1_log 3
10 10 1_log 3
11 11 3_cat 4
12 12 3_cat 4
As a single line command:
dat1$C <- seq(length(unique(dat1$B)))[ match( dat1$B, unique(dat1$B) )]
-Don
--
Don MacQueen
Lawrenc...