我有一个中等大小的数据框,有两个被破坏的行。地址很糟糕,所以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}}
答案 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
如果您希望能够将值修改为您喜欢的任何值,则需要将因子转换为character
或integer
(取决于它代表的含义)。只有在您确信所有可能的值都存在之后才能更改为一个因子。您也可以手动指定它们:
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