Я хотел бы разделить строку через регулярные интервалы. Мой вопрос практически идентичен этому: How to split a string into substrings of a given length? за исключением того, что у меня есть столбец строк в наборе данных вместо одной строки.сплит-строка с регулярными интервалами
Ниже приведен пример набора данных:
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
Очень приятно! Я добавил одно нажатие клавиши: strsplit (x, '-') –
@mnel thanks. Я обновляю свой ответ. – agstudy