Итеративный подсчет совпадений строк по столбцам R - PullRequest
0 голосов
/ 18 марта 2020

У меня есть фрейм данных с двумя столбцами строк

x <- data.frame(a = c("HH UH D", "L EH . M IH N", "EH K . S AE M . P EL"),
                b = c("HH UH F", "L IY . V IH NG", "S AE M . P EL"))

Я пытаюсь подсчитать, сколько раз символы в столбце b, строке 1 соответствуют символам в столбец а, строка 1 . Затем столбец b, строка 2 до столбец a, строка 2 , et c. Затем добавьте этот счет в качестве нового столбца. Таким образом, результат этого вычисления будет примерно таким:

x <- data.frame(a = c("HH UH D", "L EH . M IH N", "EH K . S AE M . P EL"),
                b = c("HH UH F", "L IY . V IH NG", "S AE M . P EL"), 
                c = c(2, 2, 5)) # HH and UH match, so 2 
                                # L and IH match, so 2 
                                # S, AE, M, P, and EL all match, so 5

Я попытался использовать что-то вроде этого:

a_characters <- str_split(x$a, " ")
b_characters <- str_split(x$b, " ")
stringcounting <- data.frame()

for (letter in b_characters){
  count <- str_count(a_characters, letter)
  sum_count <- sum(count)
  stringcounting <- rbind(stringcounting, sum_count)
}

Но результат здесь: 1, 50, 20, а не 2, 2, 5 (нет смысла, почему). Я предполагаю, что что-то идет не так в моем for-l oop, а также, вероятно, в том, как я разбил свои строки на символы, но я не уверен, что именно.

1 Ответ

1 голос
/ 18 марта 2020

Мы можем удалить "." после разбиения строки, поскольку мы не хотим сравнивать это и вычислять совпадающие строки, используя %in% и sum.

mapply(function(x, y) sum(x[x != "."] %in% y[y!= "."]), 
                      a_characters, b_characters)
#[1] 2 2 5
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...