2017-01-07 11 views
1

мне нужно использовать substring функцию для извлечения символов по местоположению из кадра данных, как показано на рисунке:Как использовать функцию подстроки в R, если у вас есть вектор?

enter image description here

Вот код, который я использовал:

substring(df$Text1, 
      df$'Location of Different Letters', 
      df$'Location of Different Letters') 

substring функция введена NA s в каждой строке, где числа находятся в формате символьной строки. Любое предложение, как заставить его работать? Использование as.integer на колонке «Местонахождение различных букв» не работает из-за c() и :

+0

Какого класса 'Расположение различных letters'? –

+0

У меня есть он в формате символа и списка, метод выше был применен к столбцу символов и, конечно же, не работал для столбца списка – Curious

ответ

2

Вы Location of different letters как столбец символов, который будет делать вещи немного некрасиво, как мы должны использовать eval(parse(..)).

## create a index list 
cmd <- paste0("list(", toString(df$"Location of different letters"), ")") 
# [1] "list(4, c(1,6,7,8), 3:6)" 
ind <- eval(parse(text = cmd)) 
## split your strings 
s <- strsplit(df$Text1, "") 
## use `mapply` 
set1 <- mapply("[", s, ind) 

## now compare with `Text2` to get different letters 
set2 <- strsplit(df$Text2, "") 
mapply(function (a, b) paste0(setdiff(a, b), collapse = ""), set1, set2) 
# [1] "d" "FADX" "123" 

данные:

df <- data.frame(Text1 = c("abcd", "FxyznADX", "Don123"), 
       Text2 = c("abc", "xyzn", "Don"), 
       "Location of different letters" = c("4", "c(1,6,7,8)", "3:6"), 
       check.names = FALSE) 
+0

У меня есть столбец «Расположение разных букв» в формате списка, а если это может упростить вещи – Curious

+0

@ Zheyuan Li Спасибо за ответ. Работала точно так, как мне было нужно. – Curious

1

Это работает, если у вас есть вектор значений в вашей колонке Location of different letters.

out <- sapply(c(1, 6, 7, 8), FUN = function(x) substring("FxyznADX", first = x, last = x)) 

do.call(paste, args = list(as.list(out), collapse = "")) 
[1] "FADX" 

Если у вас есть символ/коэффициент для значений, возможно, придется прибегнуть к eval(parse(...)).

sapply(eval(parse(text = "c(1, 6, 7, 8)")), FUN = function(x) substring("FxyznADX", first = x, last = x)) 

[1] "F" "A" "D" "X" 
+0

Спасибо, что сработали тоже. – Curious

 Смежные вопросы

  • Нет связанных вопросов^_^