根据另一列的第一个标记创建一个新变量(模式匹配)

时间:2016-08-04 11:04:10

标签: r

我想根据另一个人的内容创建一个新列。

表示: 如果变量以“TR01”开头,我希望条目“之前”,当以“TR02”开头时,我希望在新列中有“之后”。

DF

VPN Group Variable Value 
1    G1    TR01_01   5   
1    G1    TR01_02   6   
1    G1    TR01_03   1   
2    G2    TR01_01   6   
2    G2    TR01_02   1   
2    G2    TR01_03   5   
1    G1    TR02_01   1   
1    G1    TR02_02   2   
1    G1    TR02_03   1   
2    G2    TR02_01   4   
2    G2    TR02_02   1   
2    G2    TR02_03   1   

DF使用新clumn“new”

VPN Group Variable Value NEW
1    G1    TR01_01   5   before
1    G1    TR01_02   6   before
1    G1    TR01_03   1   before
2    G2    TR01_01   6   before
2    G2    TR01_02   1   before
2    G2    TR01_03   5   before
1    G1    TR02_01   1   after
1    G1    TR02_02   2   after
1    G1    TR02_03   1   after
2    G2    TR02_01   4   after
2    G2    TR02_02   1   after
2    G2    TR02_03   1   after

我试图用以下方法解决问题:

tt<-transform(DF,G=ifelse(Variable=="^TR01","before",ifelse(Variable=="^TR01","after",NA)))

但它不起作用,我只有NAs。

1 个答案:

答案 0 :(得分:1)

我们可以使用grep来查找子字符串,然后使用ifelse或数字索引。在这里,我正在分配(:=)一个新列(使用data.table,因为它恰好发生并应该很快)

library(data.table)
setDT(DF)[, NEW := c("after", "before")[grepl("^TR01", Variable)+1]]

或者我们可以将ifelsetransform base R方法

一起使用
transform(DF, NEW = ifelse(grepl("^TRO1", Variable), "before", "after")))