【发布时间】:2021-11-12 04:22:17
【问题描述】:
假设我有一个数据框,其中包含显示颜色的物种。
df<-data.frame(name=paste("spec",1:5),
ind=c("blue;green","red","green","red;green;blue",""))
而一些(蓝色和红色)颜色实际上意味着什么。我可以 grepl() 他们并获得一个 T/F 列
df$isredorblue<-grepl("blue|red",df$ind)
但现在我想知道哪些有意义的颜色显示在一列中。
想要的结果是:
> df
name ind isredorblue searchcolor
1 spec 1 blue;green TRUE blue
2 spec 2 red TRUE red
3 spec 3 green FALSE other
4 spec 4 red;green;blue TRUE red;blue
5 spec 5 FALSE other
我已经尝试使用 [^]+ 的 gsub 但这并没有真正起作用,因为它匹配 所有 字母,因此“r”或“e”或“d”不是“red”。 ..
> gsub("[^red]+","",df$ind)
[1] "eree" "red" "ree" "redreee" ""
现在我正在考虑使用 strsplit ......但似乎无法弄清楚我的下一步
blabla<-strsplit(df$ind, split=";")
blabla<-blabla[-which(!blabla %in% c("red","blue"))]
> blabla
[[1]]
[1] "red"
请记住这是一个 reprex,我的实际数据框要大得多,并且有不同的指标“颜色”对不同的事物很重要,所以我需要能够生成这些列尽可能少的步骤
【问题讨论】: