Возврат определенных значений в строке - PullRequest
2 голосов
/ 17 октября 2019

У меня есть 1 строка данных и 50 столбцов в строке из CSV, который я поместил в фрейм данных. Данные распределены по электронной таблице следующим образом:

"FSEG- DFGS -THDG", "SGDG- SGRE -JJDF", "DIDC- DFGS -LEMS "...

Как бы я выделил только среднюю часть каждого элемента (например," DFGS"в 1-м," SGRE"во втором и т. Д.), Подсчитать их вхождения и отобразить результаты?

Я пытался использовать функцию strsplit, но не смог заставить ее работать для всей строки данных. Я думаю, что какая-то петля могла бы быть тем, что мне нужно

Ответы [ 2 ]

1 голос
/ 17 октября 2019

Вы можете сделать unlist(strsplit(x, '-'))[seq(2, length(x)*3, 3)] (при условии, что ваши данные постоянно имеют форму ABC ).

# E.g.
fun <- function(x) unlist(strsplit(x, '-'))[seq(2, length(x)*3, 3)]
fun(c("FSEG-DFGS-THDG", "SGDG-SGRE-JJDF", "DIDC-DFGS-LEMS"))
# [1] "DFGS" "SGRE" "DFGS"

Редактировать

# Data frame
df <- structure(list(a = "FSEG-DFGS-THDG", b = "SGDG-SGRE-JJDF", c = "DIDC-DFGS-LEMS"), 
                class = "data.frame", row.names = c(NA, -1L))
fun(t(df[1,]))
# [1] "DFGS" "SGRE" "DFGS"
0 голосов
/ 17 октября 2019

Сначала мы создаем функцию strng(), а затем apply() ее в каждом столбце df. strsplit() разбивает строку на "-" и strng() возвращает вторую часть.

df = data.frame(a = "ab-bc-ca", b = "gn-bc-ca", c = "kj-ll-mn")
strng = function(x) {
  strsplit(x,"-")[[1]][2]
}

# table() outputs frequency of elements in the input
table(apply(df, MARGIN = 2, FUN = strng))

# output: bc ll 
          2  1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...