【发布时间】:2021-08-18 07:19:57
【问题描述】:
我只擅长 R 编码的基础知识,不知道如何进行复杂的循环。 我有一个大型数据框,其中包含一列地址和一列邮政编码(以及其他变量)。每列中有许多 NA。对于缺少 zip 和 state 或仅缺少 zip 的某些行,地址列的数据不完整。我所有的数据都来自同一个州。
我需要清理地址数据以便稍后进行地理编码。我不想省略 NA 行,因为我也将使用相同的数据框进行仅限邮政编码的分析(当我制作太多类似的对象时我也会迷路)。我在 Address 中有很多 NA,但我仍然有同一行的 Zipcode 值。
我的解决方案是:
- 对于 df$Address 中的每一行,如果它不是一个 NA
- 如果 df$Address 不以 df$Zipcode 结尾
- 然后将 df$Address 结合“MI”和 df$Zipcode 粘贴为新列值
- 删除重复的单词(仅适用于具有带状态地址但缺少 zip 的条目)
最小可重复样本:
Address <- c("1234 address", "5678 address, MI", "9012 address, MI 12345", "1111 adrus")
Zipcode <- c("67890", "56780", "12345", "12345")
df <- data.frame(Address, Zipcode)
#example dataframe
Address Zipcode
1234 address 67890
5678 address, MI 56780
9012 address, MI 12345 12345
1111 adrus 12345
这是我的尝试。我也尝试了 grepl() 并得到了同样的错误。
for (i in 1:length(df$Address)) {
if(!is.na(df$Address[i])) {
if (!endsWith(df$Address, df$Zipcode)) {
df$Address_cln<- paste(df$Address, df$Zipcode, sep="MI ")
}
else {dataZip$address_cln <- paste(dataZip$Address)
}}}
我收到此错误:条件的长度 > 1,并且只会使用第一个元素。它将未修改的 df$Address 粘贴到新列 df$Address_cln
我试图在继续删除重复的“MI”之前对前 3 个部分进行编码,因此我的代码中不包含该部分。
我稍后会尝试以某种方式修复拼写错误的条目,因为除了帮助我上面的合并循环之外,这是一个很大的问题。 感谢您的帮助!
【问题讨论】:
标签: r dataframe loops merge na