Поиск повторяющихся предложений/слов/фраз по группам с течением времени

У меня есть набор данных, в котором каждый столбец является переменной, а каждая строка представляет собой наблюдение (например, данные временных рядов. Это выглядит так (извиняюсь за формат, но я не могу показать данные):

введите здесь описание изображения

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

Это результат, который я хотел бы:

Извините за все правки, плохие комментарии; все еще привыкаю к ​​сайту.


person Alex    schedule 15.06.2017    source источник
comment
Вы хотите знать, является ли значение уникальным или как оно меняется со временем?   -  person Nico Coallier    schedule 15.06.2017
comment
Предоставьте воспроизводимый пример и ожидаемый результат. Это облегчит другим людям помощь   -  person Sotos    schedule 15.06.2017
comment
почти звучит так, как будто вы хотели бы это в таблице базы данных с групповыми значениями или в хранилище данных.   -  person sniperd    schedule 15.06.2017
comment
@Nico Я хотел бы знать: частота повторяющихся комментариев в процентах от общего числа комментариев; и разбивка по группам и/или лицам, сообщающим информацию. Допустим, есть еще одна переменная с именем ready со значениями: да, нет, может быть. Коррелирует ли изменение «готов» с изменением комментариев (то есть, когда «Готово» меняется с «Нет» на «Да», изменились ли комментарии по сравнению с предыдущим отчетом)?   -  person Alex    schedule 15.06.2017


Ответы (2)


Если вы хотите увидеть частоту каждого комментария, связанного с каждым человеком, и новый столбец Ready, вы можете сделать это с помощью следующего кода:

set.seed(123456)

### I use the same data as the previous example, thank you for providing this ! 
data <-data.frame(date = Sys.Date() - sample(100),
                Group = c("Cars","Trucks") %>% sample(100,replace=T),
                Reporting_person = c("A","B","C") %>% sample(100,replace=T),
                Comments = c("Awesome","Meh","NC") %>% sample(100,replace=T),
            Ready = as.character(c("Yes","No") %>% sample(100,replace=T))
            ) 

library(dplyr)

data %>% 
    group_by(Reporting_person,Ready) %>%
    count(Comments) %>%
    mutate(prop = prop.table(n))

Если то, что вы просите, — это увидеть, происходят ли изменения в комментариях с течением времени, и чтобы увидеть, связано ли это изменение с событием (например, «Готово»), вы можете использовать следующий код:

library(dplyr)

### Creating a column comments at time + plus
new = data %>% 
        arrange(Reporting_person,Group,date) %>%
        group_by(Group,Reporting_person) %>%
        mutate(comments_plusone=lag(Comments))

new = na.omit(new)

### Creating the change column   1 is a change , 0 no change

new$Change = as.numeric(new$Comments != new$comments_plusone)

### Get the correlation between Change and the events...

### Chi-test to test if correlation between the event and the change
### Not that using Pearson correlation is not pertinent here : 


tbl <- table(new$Ready,new$Change)

chi2 = chisq.test(tbl, correct=F)
c(chi2$statistic, chi2$p.value)
sqrt(chi2$statistic / sum(tbl))

Вы не должны получить значимой корреляции с этим примером. Как вы можете ясно видеть, когда вы иллюстрируете таблицу.

plot(tbl)

Чи2

Дело не в том, что использование функции cor не подходит для работы с двумя двоичными переменными.

Вот сообщение в этой теме.... Корреляция между двумя двоичными файлами

Частота изменения при изменении состояния

После ваших комментариев я добавляю этот код:

newR = data %>% 
        arrange(Reporting_person,Group,date) %>%
        group_by(Group,Reporting_person) %>%
        mutate(Ready_plusone=lag(Ready)) 


newR = na.omit(newR)

###------------------------Add the column to the new data frame
### Creating the REady change column   1 is a change , 0 no change
### Creating the change of state , I use this because you seem to have more than 2 levels.
new$State_change = paste(newR$Ready,newR$Ready_plusone,sep="_")

### Getting the frequency of Change by Change of State(Ready Yes-no..no-yes..)
result <- new %>% 
                group_by(Reporting_person,State_change) %>%
                count(Change) %>%
                mutate(Frequence = prop.table(n))%>%
                filter(Change==1)

 ### Tidyr is a great library for reshape data, you want the wide format of the previous long 
 ### dataframe... However doing this will generate a lot of NA so If I were you I would get 
 ### the result format instead of the following but this could be helpful for future need so here you go.

library(tidyr)

final = as.data.frame(spread(result, key = State_change, value = prop))[,c(1,4:7)]

Надеюсь, это поможет :)

person Nico Coallier    schedule 15.06.2017
comment
Это здорово, спасибо! Не обязательно искать корреляцию (хотя сейчас я это сделаю), просто плохая спецификация с моей стороны. Есть ли способ определить, как часто комментарии меняются, когда они готовы? Таким образом, % времени изменения комментариев, когда они идут от да->нет, нет->да (все комбинации), и разбить его по группам. Таблица будет состоять из столбцов: Нет->Да, Да->Нет, Нет->Возможно и т. д. В строках будет указано лицо или группа: Грузовики, Легковые автомобили. Значения будут % изменения = частота изменений / общее количество комментариев в этом разделе. - person Alex; 15.06.2017
comment
Конечно... после обеда добавлю, но можно было бы слить два кода :) - person Nico Coallier; 15.06.2017
comment
Спасибо большое. Я был в сообществе всего несколько дней, и все были так полезны. Наслаждайтесь обедом. - person Alex; 15.06.2017
comment
Я просто добавил то, что вы просили :) - person Nico Coallier; 15.06.2017

Что-то вроде этого ?

df <-data.frame(date = Sys.Date() - sample(10),
                Group = c("Cars","Trucks") %>% sample(10,replace=T),
                Reporting_person = c("A","B","C") %>% sample(10,replace=T),
                Comments = c("Awesome","Meh","NC") %>% sample(10,replace=T))   

#          date  Group Reporting_person Comments
# 1  2017-06-08 Trucks                B  Awesome
# 2  2017-06-05 Trucks                A  Awesome
# 3  2017-06-14   Cars                B      Meh
# 4  2017-06-06   Cars                B  Awesome
# 5  2017-06-11   Cars                A      Meh
# 6  2017-06-07   Cars                B       NC
# 7  2017-06-09   Cars                A       NC
# 8  2017-06-10   Cars                A       NC
# 9  2017-06-13 Trucks                C  Awesome
# 10 2017-06-12 Trucks                B       NC

aggregate(date ~ .,df,length)

#    Group Reporting_person Comments date
# 1 Trucks                A  Awesome    1
# 2   Cars                B  Awesome    1
# 3 Trucks                B  Awesome    1
# 4 Trucks                C  Awesome    1
# 5   Cars                A      Meh    1
# 6   Cars                B      Meh    1
# 7   Cars                A       NC    2
# 8   Cars                B       NC    1
# 9 Trucks                B       NC    1
person Moody_Mudskipper    schedule 15.06.2017
comment
Вы можете увидеть мой комментарий выше к Нико. Итак, представьте, что кто-то продолжает копировать и вставлять одни и те же комментарии с течением времени, потому что ничего не изменилось. Затем происходит событие, изменяется переменная и добавляются новые комментарии. Я хотел бы знать: 1) как часто происходит копирование и вставка по группе и//или человеку, 2) изменяется ли комментарий при изменении другой переменной? 3) какой процент всех комментариев на самом деле оригинальные (а не копипаст из предыдущего отчета). - person Alex; 15.06.2017
comment
Я думаю, что ответ отвечает 1) по группе И человеку и 2). Если это не так, вы можете дать ожидаемый результат в своем вопросе. Если это так, я могу легко заполнить его для 1) группы ИЛИ человека и 3) - person Moody_Mudskipper; 15.06.2017
comment
Так что проблема в том, что я не знаю конкретных комментариев, а наблюдений десятки тысяч. Я хотел бы что-то вроде кода обнаружения изменений, который подсчитывает, как часто комментарии совпадают с предыдущими. Я имею какой-то смысл? - person Alex; 15.06.2017
comment
Я все еще не понимаю, даже если вы не знаете всех деталей, я не понимаю, почему вы не можете привести нам пример желаемого результата. Например, вы можете дать таблицу с поддельными значениями. - person Moody_Mudskipper; 15.06.2017
comment
Определение повторного комментария: был ли комментарий таким же, как последнее наблюдение этого человека или группы? Таблица 1 Группа Количество повторных комментариев % повторных комментариев в сумме по группе Легковые автомобили 100 25% Грузовые автомобили 120 40% Внедорожники 56 11% % С 3300 4% Д 103 80% - person Alex; 15.06.2017