У меня есть символьный вектор 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
, поэтому" 84404
"в V2
становится" UT 84404
"
b) Если 24-ый символ равен non-comma
и non-whitespace
, найдите последний пробел перед запятой в V1
и до этого индекса V1
, оставшееся доходит до V2
.
например V1
имеет "8532 West Lyme St. Chesterfield, VA
", где у нас есть "t
" с 24-м индексом, поэтому нам нужно вырвать его из пробела после "St.
", таким образом V1
сохраняет "8532 West Lyme St.
" и V2
получает "Chesterfield, VA 23832
".
К концу операции у нас должно быть:
V1 <- c("377 Peninsula St. Ogden","8532 West Lyme St.",...)
V2 <- c("UT 84404","Chesterfield, VA 23832")
EDIT:
Я попробовал следующую функцию на V1, чтобы узнать, является ли 24-й символ запятой:
unlist(lapply(lapply(V1, function(z){substr(z,24,24)}),function(y){y==","}))
, который возвращает:
ИСТИНА ЛОЖЬ ЛОЖЬ ЛОЖЬ ЛОЖЬ
Теперь, когда я решил одну часть проблемы, мне нужен способ применить логику форматирования на основе приведенного выше результата.
т.е. Я хочу сделать:
unlist(lapply(lapply(V1, function(z){substr(z,24,24)}),function(y){if(y==","){something1} else if(y==" "){something2}else {something3}}))
Здесь что-то 1/2/3 взято из 1a и 1b выше.
Нужно уметь писать эту логику.