列中的 R 部分 gsub
R partial gsub in a column
我有一个关于如何为 df 的第一列部分 gsub 的问题。我可以删除冒号后的所有字符串,但我想保留以 19.
开头的行的信息
df$V1:
rs1231243:G:T:0
rs483294:C:T:5098723
19:4783234:T:G
rs19873423:A:C
19:83947355:C:T
kpg897324
rs3287492:G:C
Desired output:
rs1231243
rs483294
19:4783234:T:G
rs19873423
19:83947355:C:T
kpg897324
rs3287492
code:
df$V1 <- gsub("\:.*","",df$V1)
我不知道如何有条件地 gsub 或其他方法。请指教。谢谢
你可以使用否定。前瞻:
gsub("^(?!19)([^:]+).*", "\1", df$V1, perl = T)
这会产生
df["V2"] <- gsub("^(?!19)([^:]+).*", "\1", df$V1, perl = T)
df
V1 V2
1 rs1231243:G:T:0 rs1231243
2 rs483294:C:T:5098723 rs483294
3 19:4783234:T:G 19:4783234:T:G
4 rs19873423:A:C rs19873423
5 19:83947355:C:T 19:83947355:C:T
6 kpg897324 kpg897324
7 rs3287492:G:C rs3287492
由于您想根据向量的每个值进行条件处理,您可以使用 ifelse 函数
ifelse(test, yes, no)
参数
test - 可以强制转换为逻辑模式的对象。
是 - return 测试真实元素的值。
否 - return 测试错误元素的值。
下面的代码应该
df$V1 <- ifelse(grepl("^19",df$V1), # Test
df$V1, # yes
gsub("\:.*","",df$V1)) # No
我有一个关于如何为 df 的第一列部分 gsub 的问题。我可以删除冒号后的所有字符串,但我想保留以 19.
开头的行的信息df$V1:
rs1231243:G:T:0
rs483294:C:T:5098723
19:4783234:T:G
rs19873423:A:C
19:83947355:C:T
kpg897324
rs3287492:G:C
Desired output:
rs1231243
rs483294
19:4783234:T:G
rs19873423
19:83947355:C:T
kpg897324
rs3287492
code:
df$V1 <- gsub("\:.*","",df$V1)
我不知道如何有条件地 gsub 或其他方法。请指教。谢谢
你可以使用否定。前瞻:
gsub("^(?!19)([^:]+).*", "\1", df$V1, perl = T)
这会产生
df["V2"] <- gsub("^(?!19)([^:]+).*", "\1", df$V1, perl = T)
df
V1 V2
1 rs1231243:G:T:0 rs1231243
2 rs483294:C:T:5098723 rs483294
3 19:4783234:T:G 19:4783234:T:G
4 rs19873423:A:C rs19873423
5 19:83947355:C:T 19:83947355:C:T
6 kpg897324 kpg897324
7 rs3287492:G:C rs3287492
由于您想根据向量的每个值进行条件处理,您可以使用 ifelse 函数
ifelse(test, yes, no)
参数
test - 可以强制转换为逻辑模式的对象。
是 - return 测试真实元素的值。
否 - return 测试错误元素的值。
下面的代码应该
df$V1 <- ifelse(grepl("^19",df$V1), # Test
df$V1, # yes
gsub("\:.*","",df$V1)) # No