Поскольку ваш список уже находится в порядке возрастания, мы можем просто изменить список.
>>> timestamp.reverse()
>>> timestamp
['2010-04-20 10:25:38',
'2010-04-20 10:12:13',
'2010-04-20 10:12:13',
'2010-04-20 10:11:50',
'2010-04-20 10:10:58',
'2010-04-20 10:10:37',
'2010-04-20 10:09:46',
'2010-04-20 10:08:22',
'2010-04-20 10:08:22',
'2010-04-20 10:07:52',
'2010-04-20 10:07:38',
'2010-04-20 10:07:30']
Вот что может помочь:
Сначала разделите, используя strsplit
, затем свяжите элементы, которые принадлежат друг другу
# split the string
vec <- unlist(strsplit(string, '(?=\")(?=\")', perl = TRUE))
vec <- vec[! vec %in% c(' ', '\"')]
# that's how vec looks like right now
head(vec)
# [1] "FundSponsor:Blackrock Advisors" "Category:" "Tax-Free Income-Pennsylvania" "Ticker:" "MPA"
# [6] "NAV Ticker:"
#
# now paste the elements
ind <- grepl(':.+',vec)
tmp <- vec[!ind]
vec[!ind] <- paste0(tmp[seq(1,length(tmp),2)], tmp[seq(2,length(tmp),2)])
head(vec)
# [1] "FundSponsor:Blackrock Advisors" "Category:Tax-Free Income-Pennsylvania" "Ticker:MPA" "NAV Ticker:XMPAX"
# [5] "Average Daily Volume (shares):26,000" "Average Daily Volume (USD):[110].335M"
, с данными
string = "\"FundSponsor:Blackrock Advisors\" \"Category:\" \"Tax-Free Income-Pennsylvania\" \"Ticker:\" \"MPA\" \"NAV Ticker:\" \"XMPAX\" \"Average Daily Volume (shares):\" \"26,000\" \"Average Daily Volume (USD):\" \"[111].335M\" \"Inception Date:\" \"10/30/1992\" \"Inception Share Price:\" \"$15.00\" \"Inception NAV:\" \"$14.18\" \"Tender Offer:\" \"No\" \"Term:\" \"No\""
Объяснение
regex
(?=\")(?=\")
в основном говорит R
разбивать строку, когда есть два \"
. Синтаксис (?!*something*)
означает, что *something*
идет до / после. Таким образом, вышеприведенное просто гласит: разбить строку в каждой позиции, которой предшествует \"
и которая предшествует \"
. strsplit(...)
выше создает элементы вида \"
и
('\"Category:\" \"...'
становится вектором '\"';'Category:';'\"';' ';'...'
). Таким образом, используя ! vec %in% c(...)
, мы удаляем эти нежелательные элементы. Приложение
Если содержатся элементы вида "string:"
, за которым следует " "
, в приведенном выше коде удалите строку vec <- vec[! vec %in% c(' ', '\"')]
и добавьте строки
vec <- vec[seq(2L, length(vec), 4L)]
vec[vec == ' '] <- NA_character_
Я не уверен, хотите ли вы, чтобы результатом был один единственный ключ: формат значения или если вы просто хотите очистить эту длинную строку и иметь ее в следующем формате ключ1: значение1 ключ2: значение2 ключ3: значение3. Если это так, вы можете достичь этого с помощью следующего кода:
char = '"FundSponsor:Blackrock Advisors" "Category:" "Tax-Free Income-Pennsylvania" "Ticker:" "MPA" "NAV Ticker:" "XMPAX" "Average Daily Volume (shares):" "26,000" "Average Daily Volume (USD):" "[110].335M" "Inception Date:" "10/30/1992" "Inception Share Price:" "$15.00" "Inception NAV:" "$14.18" "Tender Offer:" "No" "Term:" "No"'
char_tidy = gsub('\\" \\"', " ", char)
# output is below
> char_tidy
[1] "\"FundSponsor:Blackrock Advisors Category: Tax-Free Income-Pennsylvania Ticker: MPA NAV Ticker: XMPAX Average Daily Volume (shares): 26,000 Average Daily Volume (USD): [110].335M Inception Date: 10/30/1992 Inception Share Price: $15.00 Inception NAV: $14.18 Tender Offer: No Term: No\""