我有一个字符向量V1
V1 <- c("377 Peninsula St. Ogden,UT","8532 West Lyme St. Chesterfield,
VA","43 E. Hilltop Street Hilliard,OH","95 Newcastle St.
Hendersonville,NC","7276 Rose St. Greenville,NC")
,另一个向量为V2
V2 <- c(84404,23832,43026,28792,27834)
现在我有以下条件:
1)用V1
字符将24th
中的每个项目分开:
a)如果第24个字符是comma
,则在该处打断该字符串,其余的应添加到V2中的相应字符串。
例如V1
具有“ 377 Peninsula St. Ogden, UT
”,其中逗号位于第24个索引,因此需要将其分成两个“ 377 Peninsula St. Ogden
”“ UT
”(注意,逗号本身被省略了),然后V1
获得“ 377 Peninsula St. Ogden
”部分,剩余部分被添加到V2
中的相应PIN,因此84404
中的“ V2
”变为“ {{1} }“
b)如果第24个字符是UT 84404
,而non-comma
在non-whitespace
中找出逗号前的最后一个空格,直到该索引V1
保持不变,剩下的将移至{{1} }。
例如V1
具有“ V2
”,其中我们在第24个索引处具有“ V1
”,因此我们需要将其从“ 8532 West Lyme St. Chesterfield, VA
”之后的空白处断开,因此t
保持“ St.
”和V1
保持“ 8532 West Lyme St.
”。
在操作结束时我们应该拥有:
V2
编辑:
我在V1上尝试了以下功能,以了解第24个字符是否为逗号:
Chesterfield, VA 23832
返回:
TRUE FALSE FALSE FALSE FALSE
现在我已经解决了一部分问题,我需要一种基于上述结果来应用格式化逻辑的方法。
即我想做:
V1 <- c("377 Peninsula St. Ogden","8532 West Lyme St.",...)
V2 <- c("UT 84404","Chesterfield, VA 23832")
这里1/2/3来自上面的1a和1b。 需要知道如何编写此逻辑。
答案 0 :(得分:1)
请考虑使用ifelse
,substr
和regexpr
(即没有套用循环)的向量化方法进行以下操作:
newV1 <- ifelse(substr(V1, 24, 24) == ",", # CONDITIONALLY CHECK 24TH CHARACTER
substr(V1, 1, regexpr(",", V1)-1), # EXTRACT UNTIL 24TH CHARACTER
substr(V1, 1,
regexpr(" (?=[^ ]+$)",
substr(V1, 1, 24),
perl=TRUE)-1) # EXTRACT UNTIL LAST SPACE BEFORE 24TH CHAR
)
newV1
# [1] "377 Peninsula St. Ogden" "8532 West Lyme St."
# [3] "43 E. Hilltop Street" "95 Newcastle St."
# [5] "7276 Rose St."
newV2 <- paste(ifelse(substr(V1, 24, 24) == ",", # CONDITIONALLY CHECK 24TH CHARACTER
substr(V1, regexpr(",", V1)+1,
nchar(V1)), # EXTRACT AFTER 24TH CHARACTER
substr(V1,
regexpr(" (?=[^ ]+$)",
substr(V1, 1, 24),
perl=TRUE)+1,
nchar(V1))), # EXTRACT AFTER LAST SPACE BEFORE 24TH CHAR
V2) # PASTE V2 VECTOR ELEMENTWISE
newV2
# [1] "UT 84404" "Chesterfield, VA 23832"
# [3] "Hilliard,OH 43026" "Hendersonville,NC 28792"
# [5] "Greenville,NC 27834"