为什么我不能编辑此数据框中的值?

时间:2014-04-22 13:27:38

标签: r

我有一个中等大小的数据框,有两个被破坏的行。地址很糟糕,所以geocode()没有对它们进行地理编码,所以我也没有lat / long信息。

我尝试制作临时帧:

tmp.frame <- subset(all.sites, is.na(all.sites$lat))

我可以使用tmp.frame更新tmp.frame$Address <- c("Better Address 1","Better Addresss 2")中的值,但我似乎无法编辑较大帧中的值。 all.sites[392, 7]是缺少纬度/经度的点之一,我all.sites[392, 7] = c("Better Addy") Warning message: In `[<-.factor`(`*tmp*`, iseq, value = "Better Addy") : invalid factor level, NA generated 可以做到这一点,但我得到了这个:

tmp.frame[2,4] = c("Better")

奇怪的是,vi(all.sites[392,7])工作正常。所以我不确定两者之间的区别是什么。

注意:当我尝试structure(NA_integer_, .Label = c("10003 39th Avenue",..., class = "factor") 时,我大致得到了这个:

{{1}}

1 个答案:

答案 0 :(得分:4)

这是因为您尝试更新的列是factor,根据定义,它具有有限的域(可能的值集)。当您尝试强制将条目设置为不属于此域的级别时,会产生警告并NA。试试这个:

ff <- factor(sample(1:3, size=20, replace=TRUE))  ## factor of 1, 2, and 3
ff[5] <- 4    ## try changing the fifth entry to an 'unknown' value
levels(ff)    ## show set of known values

如果您希望能够将值修改为您喜欢的任何值,则需要将因子转换为characterinteger(取决于它代表的含义)。只有在您确信所有可能的值都存在之后才能更改为一个因子。您也可以手动指定它们:

ff2 <- factor(sample(1:3, size=20, replace=TRUE), levels=1:4)  ## 1-4 are legal
ff2[5] <- 4    ## accepted without problems
head(ff2)      ## check