[英]R: copy string to column if contained in another column
我有一个数据库(根据dplyr原理构建),提供了文献数据库的概述。 其中一列是“语言”,另一列是“标记”,我想清除它已弃用的列,因为它包含多个信息。 它还包含“语言”信息。
每个书籍条目在“标签”条目中都有其语言(以及其他信息,以逗号分隔)。 如何将“标签”中包含的所有这些语言字符串复制到相应的语言列(当前为空)。
即,如何执行“如果标签列包含字符串“英语”,然后将“英语”移至“语言”列?
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
您可以使用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>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.