我想根据另一个人的内容创建一个新列。
表示: 如果变量以“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。
答案 0 :(得分:1)
我们可以使用grep
来查找子字符串,然后使用ifelse
或数字索引。在这里,我正在分配(:=
)一个新列(使用data.table
,因为它恰好发生并应该很快)
library(data.table)
setDT(DF)[, NEW := c("after", "before")[grepl("^TR01", Variable)+1]]
或者我们可以将ifelse
与transform
base R
方法
transform(DF, NEW = ifelse(grepl("^TRO1", Variable), "before", "after")))