【发布时间】:2018-12-10 16:21:30
【问题描述】:
我有一列数据如下所示:
**varX**
Q1#_1
Q1#_5
Q1#_10
我想将数据编辑成如下所示:
**varX**
1
5
10
我可以使用一个命令来简单地保留下划线后面的所有信息吗?
【问题讨论】:
-
您可以使用
gsub(".*_(\\d+)", "\\1", df$varX)即使您的字符串开头的模式发生变化,它也会起作用。
我有一列数据如下所示:
**varX**
Q1#_1
Q1#_5
Q1#_10
我想将数据编辑成如下所示:
**varX**
1
5
10
我可以使用一个命令来简单地保留下划线后面的所有信息吗?
【问题讨论】:
gsub(".*_(\\d+)", "\\1", df$varX)即使您的字符串开头的模式发生变化,它也会起作用。
如果您想要tidyverse 解决方案,可以使用stringr 包中的str_extract:
data %>%
mutate(varx = str_extract(varx, "[0-9]+$")) %>%
mutate(varx = as.numeric(varx)) # include this last line if you want a number and not character
【讨论】:
如果你总是有 Q1#_ 字符串,你可以这样做:
gsub("Q1#_", "", df$varX)
【讨论】:
我认为您正在寻找sub,将字符串的某个部分替换为其他内容。如果你想花哨,你可以给它一个正则表达式,或者只是给它一个文字:
VarX <- sub('Q1#_', '', VarX, fixed=T)
奇特的方式(“删除之前包括下划线在内的所有内容”)是
VarX <- sub('^.*_', '', VarX)
您可能希望将其转换为数字或整数:
VarX <- as.integer(sub('Q1#_', '', VarX, fixed=T)) # or as.numeric
【讨论】:
你可以使用正则表达式:
df[["varX"]] <- sub(".+_", "", df[["varX"]])
df
varX
1 1
2 5
3 10
或无正则表达式: strsplit():
df[["varX"]] <- sapply(df[["varX"]], function(x) strsplit(x, "_")[[c(1,2)]])
【讨论】: