我试图弄清楚如何根据字符串中的模式创建虚拟变量。关键是最终得到一个简单的方法,使我的ggplot(颜色,线型等)的某些方面对于具有共同点的样本(例如同一基因的不同类型的突变 - 每个样本名称)相同包含基因的名称,加上其他一些字符)。
作为虹膜数据集的一个例子,让我们说我想添加一个列(我的虚拟变量),它对于名称中包含字母" v"和物种的物种有一个值。不属于物种的另一个价值。 (在真实数据集中,我有更多可能的类别。)
我一直在尝试使用mutate
和recode
,str_detect
或if_else
,但似乎无法正确使用语法。例如,
mutate(iris,
anyV = ifelse(str_detect('Species', "v"), "withV", "noV"))
不会抛出任何错误,但它也没有检测到任何物种名称都包含v。我认为这与我无法弄清楚如何让str_detect
起作用有关:
iris %>%
select(Species) %>%
str_detect("setosa")
只返回[1] FALSE
。
iris %>%
filter(str_detect('Species', "setosa"))
也不起作用。
(我还尝试过基于7 Most Practically Useful Operations When Wrangling Text Data in R中的示例的变异/重新编码解决方案,但也无法实现。)
我做错了什么?我该如何解决?
答案 0 :(得分:1)
这有效:
RouteController.getInstance()
嵌套class RouteController {
log() {
return 'Route';
}
static getInstance() {
if (!(this.singleton instanceof this)) {
// Only called twice so you can verify it's only initialized
// once for each class
console.log('Creating singleton...');
this.singleton = new this();
}
return this.singleton;
}
}
class PostController extends RouteController {
log() {
return 'Post';
}
}
console.log(RouteController.getInstance().log());
console.log(PostController.getInstance().log());
console.log(RouteController.getInstance().log());
console.log(PostController.getInstance().log());
语句的替代方法:
library(stringr)
iris%>% mutate(
anyV = ifelse(str_detect(Species, "v"), "withV", "noV"))
Sepal.Length Sepal.Width Petal.Length Petal.Width Species anyV
1 5.1 3.5 1.4 0.2 setosa noV
2 4.9 3.0 1.4 0.2 setosa noV
3 4.7 3.2 1.3 0.2 setosa noV
4 4.6 3.1 1.5 0.2 setosa noV
5 5.0 3.6 1.4 0.2 setosa noV
...
52 6.4 3.2 4.5 1.5 versicolor withV
53 6.9 3.1 4.9 1.5 versicolor withV
54 5.5 2.3 4.0 1.3 versicolor withV
55 6.5 2.8 4.6 1.5 versicolor withV
56 5.7 2.8 4.5 1.3 versicolor withV
57 6.3 3.3 4.7 1.6 versicolor withV
58 4.9 2.4 3.3 1.0 versicolor withV
59 6.6 2.9 4.6 1.3 versicolor withV