【发布时间】:2013-08-13 00:04:25
【问题描述】:
我有一个如下所示的数据框:
df <- data.frame(one=c("s1_below_10", "s2_below_20"),
two=c("s3_above_10","s4_above_10"))
我想用第一个下划线前面的数字替换所有字符串。换句话说,期望的输出是
1 3
2 4
我想知道如何执行此替换(数据集非常大)。感谢您的帮助。
【问题讨论】:
我有一个如下所示的数据框:
df <- data.frame(one=c("s1_below_10", "s2_below_20"),
two=c("s3_above_10","s4_above_10"))
我想用第一个下划线前面的数字替换所有字符串。换句话说,期望的输出是
1 3
2 4
我想知道如何执行此替换(数据集非常大)。感谢您的帮助。
【问题讨论】:
基本的gsub 调用类似于:
gsub("^.+?(\\d+)_.+","\\1",df$one)
[1] "1" "2"
您可以lapply 到每一列:
data.frame(lapply(df, gsub, pattern="^.+(\\d+)_.+",replacement= "\\1"))
one two
1 1 3
2 2 4
【讨论】:
如果您想要的值是 always 字符串的第二个字符(您的所有示例似乎都是如此),您可以使用substr 执行此操作:
data.frame(lapply(df, substr, 2, 2))
输出:
one two
1 1 3
2 2 4
【讨论】: