在尝试使用grepl
对数据框进行子集时,我遇到了一些意外行为(至少对我而言)。以下是举例说明问题:
> myVec <- c("ISB*", "ISNB*")
> myDF <- data.frame(Source = rep(myVec, 5, 2), Value = 1:10)
> print(myDF)
Source Value
1 ISB* 1
2 ISNB* 2
3 ISB* 3
4 ISNB* 4
5 ISB* 5
6 ISNB* 6
7 ISB* 7
8 ISNB* 8
9 ISB* 9
10 ISNB* 10
> myDF.b <- myDF[grepl("ISB*", myDF$Source), ]
> print(myDF.b)
Source Value
1 ISB* 1
2 ISNB* 2
3 ISB* 3
4 ISNB* 4
5 ISB* 5
6 ISNB* 6
7 ISB* 7
8 ISNB* 8
9 ISB* 9
10 ISNB* 10
> myDF.nb <- myDF[grepl("ISNB*", myDF$Source), ]
> print(myDF.nb)
Source Value
2 ISNB* 2
4 ISNB* 4
6 ISNB* 6
8 ISNB* 8
10 ISNB* 10
当我创建myDF的子集来创建myDF.b时,我使用grepl("ISB*", myDF$Source), ]
。现在,我期望的是它只抓取ISB*
行,但它抓住了所有行。我意识到ISNB*
包含与ISB*
相同顺序的所有相同字母,但我很惊讶地看到中间的N
没有丢弃{{1}从匹配它。我希望grepl
与ISB*N
匹配,但不能与中间的ISB*
匹配。
这是正常行为还是我缺少一个论点?提前谢谢。
答案 0 :(得分:3)
我们需要转义// get the color(s) you provided for the chart
List<Integer> colors = chart.getData().getDataSetByIndex(dataSetIndex).getColors();
int newcolor = Color.RED;
colors.set(e.getXIndex(), newcolor); // replace the color at the specified index
chart.invalidate(); // refresh
,因为它是一个特殊字符,意味着零或更多。
*
或者@Pierre Lafortune提到,myDF[grepl("ISB\\*", myDF$Source), ]
可以使用(会更快)
fixed=TRUE