[R] change value in one cell
Rolf Turner
rolf.turner at xtra.co.nz
Sat Jun 11 10:18:07 CEST 2011
On 11/06/11 18:14, jour4life wrote:
> That's great! But, I guess I should have provided a better example for
> my problem. The reason being that I did not consider strings. For
> instance, in my case, I'm actually trying to add a value to a data frame
> that looks like this:
>
> Obs X
> 0 NA
> 1 "01 001"
> 2 "01 002"
> 3 "01 003"
>
> And I am actually trying to get that specific "NA" value and convert it
> to "00 000" so it can look like this:
>
> Obs X
> 0 "00 000"
> 1 "01 001"
> 2 "01 002"
> 3 "01 003"
>
> When I write the code you provided, I get this result:
>
> x[1,"X"]<-"00 000"
> Warning message:
> In `[<-.factor`(`*tmp*`, iseq, value = c(NA, 3L, 4L, 5L, 6L, 7L, :
>
> invalid factor level, NAs generated
>
> I am wondering what I am doing wrong and how to solve this problem.
>
> Thanks for all the help!
The error is clear enough, isn't it? "00 000" is not one of the levels
of the
"X" column of your data frame; this column is a factor. Probably because
of the "stringsAsFactors = TRUE" default in options().
Since you appear to have been unaware of the factor nature of "X",
presumably
you don't really want it to be a factor. If this is the case execute
x[,"X"] <- as.character(x[,"X"])
and then your reassignment of the [1,"X"] entry of "x" will work.
If you do want "X" to be a factor you could:
(a) execute x[,"X"] <- factor(x[,"X"]) *after* doing the
reassignment, or
(b) execute levels(x[,"X"]) <- c("00 000",levels(x[,"X"])) *before*
doing
the reassignment.
Learn more about how R works. In particular learn about factors; they are
important and useful.
cheers,
Rolf Turner
More information about the R-help
mailing list