如何清理不规则字符串并将它们组织到右列的数据框中
how to clean irregular strings & organize them into a dataframe at right column
我有两个在向量中看起来像这样的长字符串:
x <- c("Job Information\n\nLocation: \n\n\nScarsdale, New York, 10583-3050, United States \n\n\n\n\n\nJob ID: \n53827738\n\n\nPosted: \nApril 22, 2020\n\n\n\n\nMin Experience: \n3-5 Years\n\n\n\n\nRequired Travel: \n0-10%",
"Job Information\n\nLocation: \n\n\nGlenview, Illinois, 60025, United States \n\n\n\n\n\nJob ID: \n53812433\n\n\nPosted: \nApril 21, 2020\n\n\n\n\nSalary: \n0,000.00 - 0,000.00 (Yearly Salary)")
我的目标是将它们整齐地组织在数据框(输出形式)中,如下所示:
#View(df)
Location Job ID Posted Min Experience Required Travel Salary
[1] Scarsdale,... 53827738 April 22... 3-5 Years 0-10% NA
[2] Glenview,... 53812433 April 21... NA NA 0,000.00 - 0,000.00 (Yearly Salary)
(...) 是为了在此处整齐地呈现数据框。
但是如您所见,两个字符串不一定具有相同的属性。例如,第一个字符串有 Min Experience 和 Required Travel,但在第二个字符串上,这些字段不存在,但有 Salary。所以这对我来说变得非常棘手。我想我会在 \n
个字符之间读取,但它们没有设置,有些有两个换行符,其他有 4 或 5 个。我想知道是否有人可以帮助我。我会感激的!
我们可以将字符串拆分为一个或多个 '\n'
('\n{1,}'
)。从每个单词中删除第一个单词('Job Information'
),因为我们在任何地方都不需要它(x <- x[-1]
)。对于字符串的剩余部分,我们可以看到它们以列名 - 列值的形式成对出现。我们使用交替索引从中创建一个数据框,然后 bind_rows
按名称组合所有这些数据框。
dplyr::bind_rows(sapply(strsplit(gsub(':', '', x), '\n{1,}'), function(x) {
x <- x[-1]
setNames(as.data.frame(t(x[c(FALSE, TRUE)])), x[c(TRUE, FALSE)])
}))
# Location Job ID Posted Min Experience
#1 Scarsdale, New York, 10583-3050, United States 53827738 April 22, 2020 3-5 Years
#2 Glenview, Illinois, 60025, United States 53812433 April 21, 2020 <NA>
# Required Travel Salary
#1 0-10% <NA>
#2 <NA> 0,000.00 - 0,000.00 (Yearly Salary)
我有两个在向量中看起来像这样的长字符串:
x <- c("Job Information\n\nLocation: \n\n\nScarsdale, New York, 10583-3050, United States \n\n\n\n\n\nJob ID: \n53827738\n\n\nPosted: \nApril 22, 2020\n\n\n\n\nMin Experience: \n3-5 Years\n\n\n\n\nRequired Travel: \n0-10%",
"Job Information\n\nLocation: \n\n\nGlenview, Illinois, 60025, United States \n\n\n\n\n\nJob ID: \n53812433\n\n\nPosted: \nApril 21, 2020\n\n\n\n\nSalary: \n0,000.00 - 0,000.00 (Yearly Salary)")
我的目标是将它们整齐地组织在数据框(输出形式)中,如下所示:
#View(df)
Location Job ID Posted Min Experience Required Travel Salary
[1] Scarsdale,... 53827738 April 22... 3-5 Years 0-10% NA
[2] Glenview,... 53812433 April 21... NA NA 0,000.00 - 0,000.00 (Yearly Salary)
(...) 是为了在此处整齐地呈现数据框。
但是如您所见,两个字符串不一定具有相同的属性。例如,第一个字符串有 Min Experience 和 Required Travel,但在第二个字符串上,这些字段不存在,但有 Salary。所以这对我来说变得非常棘手。我想我会在 \n
个字符之间读取,但它们没有设置,有些有两个换行符,其他有 4 或 5 个。我想知道是否有人可以帮助我。我会感激的!
我们可以将字符串拆分为一个或多个 '\n'
('\n{1,}'
)。从每个单词中删除第一个单词('Job Information'
),因为我们在任何地方都不需要它(x <- x[-1]
)。对于字符串的剩余部分,我们可以看到它们以列名 - 列值的形式成对出现。我们使用交替索引从中创建一个数据框,然后 bind_rows
按名称组合所有这些数据框。
dplyr::bind_rows(sapply(strsplit(gsub(':', '', x), '\n{1,}'), function(x) {
x <- x[-1]
setNames(as.data.frame(t(x[c(FALSE, TRUE)])), x[c(TRUE, FALSE)])
}))
# Location Job ID Posted Min Experience
#1 Scarsdale, New York, 10583-3050, United States 53827738 April 22, 2020 3-5 Years
#2 Glenview, Illinois, 60025, United States 53812433 April 21, 2020 <NA>
# Required Travel Salary
#1 0-10% <NA>
#2 <NA> 0,000.00 - 0,000.00 (Yearly Salary)