添加#列,以链接两个连续的行(按句点),这些连续的行在嵌套列中具有> 2个共同的项

时间:2019-05-12 23:22:31

标签: r

tl; dr底部的样本表应显示我正在尝试实现的目标。谢谢您的帮助。

我有一个带有时间步列(int)和簇列的数据帧,其中每个值都是一个列表。

每当有新的时间步可用时,当群集列中至少有2个共同点时,我要评估(t,t-1)。附加的“组”列(int)将具有一个计数器,该计数器将应用于满足这些条件的所有行。每次找到匹配项,代码都会检查最后一个计数器是什么,并自动递增。

每个时间步可能具有可变数量的行,并且簇列中的列表将具有可变数量的元素。因此,一些时间步骤可能包括几个唯一的组。只要公共链接中的两项没有中断,某些小组可能会跨越许多时间步长。

*对于每个时间步,列表项将仅显示在一行中,因此不必担心。

我尝试创建一个嵌套的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)

group列中的输出就是我想要的。

<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>

0 个答案:

没有答案