gpt4 book ai didi

R - 使用循环搜索一个变量与另一个变量并创建新的合并变量

转载 作者:行者123 更新时间:2023-12-04 02:25:53 25 4
gpt4 key购买 nike

我只擅长 R 编码的基础知识,不确定如何进行复杂循环。我有一个大型数据框,其中包含一列地址和一列邮政编码(以及其他变量)。每列中有许多 NA。地址列中某些行的数据不完整,其中缺少 zip 和州或仅缺少 zip 。我的所有数据都来自同一个州。

稍后我需要清理地址数据以进行地理编码。我不想省略 NA 行,因为我也将使用相同的数据框进行仅限邮政编码的分析(当我制作太多相似的对象时,我也会迷路)。我在 Address 中有很多 NA,但我仍然有同一行的 Zipcode 值。

我的解决方案是:

  1. 对于 df$Address 中的每一行,如果它不是 NA
  2. 如果 df$Address 不以 df$Zipcode 结尾
  3. 然后将 df$Address 与“MI”和 df$Zipcode 组合粘贴为新列值
  4. 删除重复的单词(对于地址有状态但仅缺少 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 个部分,这样它就不会包含在我的代码中。

我稍后会尝试以某种方式修复拼写错误的条目,因为除了帮助我上面的合并循环外,这是一个很大的问题。感谢您的帮助!

最佳答案

我们可以检查 'Address' 是否在字符串的末尾有 5 位数字,然后返回 'Address' 或者 paste (str_c) with ' zip ”列

library(dplyr)
library(stringr)
df %>%
mutate(Address2 = case_when(str_detect(Address, '\\d{5}$') ~
Address, str_detect(Address, 'MI$') ~ str_c(Address, Zipcode,
sep = ' '), TRUE ~ str_c(Address, Zipcode, sep = ', MI ')))

-输出

#                 Address Zipcode               Address2
#1 1234 address 67890 1234 address MI 67890
#2 5678 address, MI 56780 5678 address, MI 56780
#3 9012 address, MI 12345 12345 9012 address, MI 12345
#4 1111 adrus 12345 1111 adrus, MI 12345

关于R - 使用循环搜索一个变量与另一个变量并创建新的合并变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67766037/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com