Добавьте столбец #, который связывает две последовательные строки (по периодам), которые имеют> 2 общих элемента во вложенном столбце - PullRequest
0 голосов
/ 13 мая 2019

tl; dr. Образец таблицы внизу должен показать, чего я пытаюсь достичь. Спасибо за вашу помощь.

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

Каждый раз, когда доступен новый временной шаг, я хочу оценить (t, t-1), когда в столбце кластера есть по крайней мере 2 общих элемента. Дополнительный столбец «группа» (int) будет иметь счетчик, который применяется ко всем строкам, которые соответствуют этим критериям. Каждый раз, когда будет найдено совпадение, код будет проверять, какой счетчик является последним и автоматически увеличивается.

Каждый шаг по времени может иметь переменное количество строк, а списки в столбце кластера будут иметь переменное количество элементов. Итак, некоторые временные шаги могут включать несколько уникальных групп. Некоторые группы могут охватывать множество временных шагов, если не нарушена общая ссылка на 2 элемента.

* Для каждого временного шага элементы списка будут появляться только в одной строке, так что это не проблема.

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

ff <- function(tstep) {
  old <- df2b %>% filter(timestep_time == (tstep-1))
  new <- df2b %>% filter(timestep_time == (tstep))
  oldo <<- c()
  newo <<- c()
  var1 <<- c()
  for (i in old$cluster){
    for (x in new$cluster){
      if ((length(intersect(i,x)) > 1)&(1 == 1)){
        for (length(i)) {

        }
        #dfm$group[(dfm$cluster == i) & (dfm$timestep_time == tstep)] <<- 7
        var1 <<- c(var1,c(tstep-1,i))
      }
    }
  }
}
ff(285)

Вывод в столбце группы - это то, что мне нужно.

<table width="328">
<tbody>
<tr>
<td width="95">timestep_time</td>
<td width="169">cluster</td>
<td width="64">group</td>
</tr>
<tr>
<td>1</td>
<td>c("abc","bcd")</td>
<td>1</td>
</tr>
<tr>
<td>1</td>
<td>c("232","wer")</td>
<td>2</td>
</tr>
<tr>
<td>1</td>
<td>c("3ed")</td>
<td>&nbsp;</td>
</tr>
<tr>
<td>1</td>
<td>c("2ws","3ed","5tg","6yh")</td>
<td>&nbsp;</td>
</tr>
<tr>
<td>2</td>
<td>c("abc","bcd")</td>
<td>1</td>
</tr>
<tr>
<td>2</td>
<td>c("232","wer")</td>
<td>2</td>
</tr>
<tr>
<td>2</td>
<td>c("3ed","7uj")</td>
<td>3</td>
</tr>
<tr>
<td>3</td>
<td>c("232","wer")</td>
<td>2</td>
</tr>
<tr>
<td>3</td>
<td>c("3ed","7uj","5tg")</td>
<td>3</td>
</tr>
<tr>
<td>4</td>
<td>c("232","wer")</td>
<td>2</td>
</tr>
<tr>
<td>4</td>
<td>c("3ed")</td>
<td>&nbsp;</td>
</tr>
</tbody>
</table>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...