R通过选择部分字符串创建一列
R create a column by selecting partial strings
我有一个数据框,我想通过分隔符提取其中一列上的特定字符串,但有几个条件。我想改变一个仅包含 COSVxxxx 字符串的新列。
df:
ID
.
COSV50419740
.
.
.
rs375210814
.
rs114284775;COSV60321424
.
.
.
rs67376798;88974
rs1169783812
rs56386506;51676;COSV66451617
rs80358907;52202
.
.
.
482972
629301
COSV66463357
rs80358408;51066
rs80358420;51100;COSV66464432
所需的 df:
ID COSV.ID
. .
COSV50419740 COSV50419740
. .
. .
. .
rs375210814 rs375210814
. .
rs114284775;COSV60321424 COSV60321424
.
.
.
rs67376798;88974 rs67376798;88974
rs1169783812 rs1169783812
rs56386506;51676;COSV66451617 COSV66451617
rs80358907;52202 rs80358907;52202
. .
. .
. .
482972 482972
629301 629301
COSV66463357 COSV66463357
rs80358408;51066 rs80358408;51066
rs80358420;51100;COSV66464432 COSV66464432
如果没有 COSV 注释,我想保留字符串。但是,我的问题是有些行包含一到四个冒号分隔符的注释。我尝试使用 cSplit 函数将它们分开,但不知道如何将 COSV 字符串转换为一列。
你可以在这里使用sub
,例如
df$ID_new <- ifelse(grepl("\bCOSV\d+\b", df$ID),
sub("^.*\b(COSV\d+)\b.*$", "\1", df$ID),
NA)
此选项将分配(最后的)COSV 值,如果它存在于 ID
列中,否则将分配 NA
.
我有一个数据框,我想通过分隔符提取其中一列上的特定字符串,但有几个条件。我想改变一个仅包含 COSVxxxx 字符串的新列。
df:
ID
.
COSV50419740
.
.
.
rs375210814
.
rs114284775;COSV60321424
.
.
.
rs67376798;88974
rs1169783812
rs56386506;51676;COSV66451617
rs80358907;52202
.
.
.
482972
629301
COSV66463357
rs80358408;51066
rs80358420;51100;COSV66464432
所需的 df:
ID COSV.ID
. .
COSV50419740 COSV50419740
. .
. .
. .
rs375210814 rs375210814
. .
rs114284775;COSV60321424 COSV60321424
.
.
.
rs67376798;88974 rs67376798;88974
rs1169783812 rs1169783812
rs56386506;51676;COSV66451617 COSV66451617
rs80358907;52202 rs80358907;52202
. .
. .
. .
482972 482972
629301 629301
COSV66463357 COSV66463357
rs80358408;51066 rs80358408;51066
rs80358420;51100;COSV66464432 COSV66464432
如果没有 COSV 注释,我想保留字符串。但是,我的问题是有些行包含一到四个冒号分隔符的注释。我尝试使用 cSplit 函数将它们分开,但不知道如何将 COSV 字符串转换为一列。
你可以在这里使用sub
,例如
df$ID_new <- ifelse(grepl("\bCOSV\d+\b", df$ID),
sub("^.*\b(COSV\d+)\b.*$", "\1", df$ID),
NA)
此选项将分配(最后的)COSV 值,如果它存在于 ID
列中,否则将分配 NA
.