R:如果包含在另一列

时间:2018-03-22 12:04:03

标签: r database dplyr

我有一个数据库(根据dplyr原理构建),概述了文献数据库。其中一列是"语言",另一列是"标记",一个已弃用的列我想清理,因为它包含多个信息。它还包含"语言"信息。

每个图书条目的语言都在"标记"条目(以及其他信息,以逗号分隔)。如何复制" tag"中包含的每个语言字符串?到相应的语言列(当前为空)。

即,我该怎么做"如果标签栏包含字符串"英语"然后移动"英语"到专栏"语言"?

2 个答案:

答案 0 :(得分:0)

db<-data.frame(tags=c("Moose, English", "Feet, French"), language=NA)

db$language<-ifelse(grepl("English", db$tags), "English", db$language)
db$language<-ifelse(grepl("French", db$tags), "French", db$language)

这样做的缺点是要求您了解标签列中的所有可能语言。您可能希望在完成识别任何遗留语言时执行此操作:

db$tags[is.na(db$language)]

这将为您提供尚未分配任何语言的所有案例的标签。

更新:稍微简化的版本将使用带有所有语言名称的向量的for循环:

languages<-c("English","French","Spanish"[...])
for (i in 1:length(languages)) {
  db$language<-ifelse(grepl(languages[i], db$tags), languages[i], db$language)
}

两个选项都返回

            tags language
1 Moose, English  English
2   Feet, French   French

答案 1 :(得分:0)

您可以使用grepl检查字符串是否包含某些内容。

例如:

tag <- c('Containing English Information', 'Containing unknown information')
testdata <- data.frame(tag)
testdata$language <- ifelse(grepl("English", testdata$tag), "English", NA)
testdata

返回

                             tag language
1 Containing English Information  English
2 Containing unknown information     <NA>