我有一个数据框df,我想根据Command中名字的几个条件来做子集。
我希望这些子集作为我的情节的颜色。我不知道如何在所有这些条件下使用grep。这是我目前的df:
'data.frame': 36919 obs. of 162 variables
$TE :int 38,41,11,52,48,75,.....
$TR :int 100,210,548,546,.....
$Command :factor W/2229 levels "_localize_PD","_localize_tre_t2","_abdomen_t1_seq","knee_pd_t1_localize"...
但是我希望我的子集的输出产生一个像这样的新列:
$TE :int 38,41,11,52,48,75,.....
$TR :int 100,210,548,546,.....
$NewCommand :factor W/6 levels "PD","t2","t1","t1+PD",...
我使用以下内容获取前3个子集:
hast1=grepl("t1", df$Command)
hast2=grepl("t2", df$Command)
haspd=grepl("pd", df$Command)
现在我不知道如何获得其他3个子集并使用这6个子集作为我的情节的颜色。 谢谢你的帮助。
答案 0 :(得分:0)
如果你想提取特定字符串并在找不到模式时用NA
替换,那么可能会这样做。
首先创建一个包含条件的向量,然后使用str_extract
中的stringr
返回模式。如果找不到模式,则返回NA
library(stringr)
v1 <- c('PD', 't1', 't2', 't1+PD', 't2+PD')
str_extract(df$command, paste(v1, collapse='|'))
答案 1 :(得分:0)
获取具有多个条件的名称的正确方法是:
hasPDT2 =grepl("(.*t2.*PD.*)|(.*PD.*t2.*)", df$Command)
hasPDT1 =grepl("(.*t1.*PD.*)|(.*PD.*t1.*)", df$Command)
然后我们可以创建一个新列来包含这些新名称:
df$new_name = NA
df[haspd,'new_name'] = 'pd'
df[hast1,'new_name'] = 't1'
df[hast2,'new_name'] = 't2'
df[hasPDT2,'new_name'] = 'pdt2'
df[hasPDT1,'new_name'] = 'pdt1'
这些命令的顺序很重要