用数字替换字符列

时间:2018-06-01 02:42:10

标签: r gsub

我有这样的df:

df <- 
ID                  ID2
Subject 10010-001   NA
Subject 20010-002   NA

我想摆脱-之前的任何事情并保留号码。输出应该是这样的。

df <-
ID                  ID2
Subject 10010-001   001
Subject 20010-002   002

我尝试使用gsub,但仍然没有做到。这就是我的尝试。

df$ID2 <- as.numeric(gsub("Subject \\d+-","",as.character(df$ID)))

我正在使用RStudio。

1 个答案:

答案 0 :(得分:2)

如果你不适合正则表达式,你也可以使用strsplit。

do.call('rbind',lapply(strsplit(c("Subject 10010-001", "Subject 20010-002"),"-"),`[[`,2))

此处strsplit会将您的数据与&#34; - &#34; ,然后我们使用lapply[[从strsplit输出中获取第二项。可以使用do.call将最终输出放入列式表示中,您也可以在此处选择unsplit。上面的输出是带有字符数据的矩阵。您可以使用data.frame将其置于所需的格式中。

根据@thelatemail

的建议,

更好

 sapply(strsplit(c("Subject 10010-001", "Subject 20010-002"),"-"),`[[`,2)

这里应用了相同的逻辑但由于我们不必绑定任何内容,因此我们使用sapply代替lapply,因此它不那么麻烦。

您现有的正则表达式似乎是正确的,唯一的检查是我认为您不应该使用as.numeric,如果您想 00 在前面。