繁体   English   中英

R:如果包含在另一列中,则将字符串复制到列

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM