我希望能够在固定间隔下分割字符串。我的问题几乎与如何将字符串拆分成给定长度的子字符串?相同,只是我有一个数据集中的字符串列,而不仅仅是一个字符串。
以下是一个示例数据集:
以下是一个示例数据集:
df = read.table(text = "
my.id X1
010101 1
010102 1
010103 1
010104 1
020101 1
020112 1
021701 0
021802 0
133301 0
133302 0
241114 0
241215 0
", header = TRUE, colClasses=c('character', 'numeric'), stringsAsFactors = FALSE)
这是期望的结果。我希望去掉前导零,如下所示:
desired.result = read.table(text = "
A1 A2 A3 X1
1 1 1 1
1 1 2 1
1 1 3 1
1 1 4 1
2 1 1 1
2 1 12 1
2 17 1 0
2 18 2 0
13 33 1 0
13 33 2 0
24 11 14 0
24 12 15 0
", header = TRUE, colClasses=c('numeric', 'numeric', 'numeric', 'numeric'), stringsAsFactors = FALSE)
这里有一个循环,看起来接近我可能可以使用。然而,我认为可能有一种更高效的方法。
for(i in 1:nrow(df)) {
print(substring(df$my.id[i], seq(1, 5, 2), seq(2, 6, 2)))
}
这个apply
语句无法工作:
apply(df$my.id, 1, function(x) substring(df$my.id[x], seq(1, 5, 2), seq(2, 6, 2)) )
谢谢您的建议。我更喜欢使用基本 R 的解决方案。
x <- gsub('([0-9]{2})([0-9]{2})([0-9]{2})','\\1-\\2-\\3',df$my.id); do.call(rbind, lapply(strsplit(x,'-), as.numeric))
,以避免多次编写和执行regex
。 - mnel