创建唯一的名称列表

时间:2018-03-03 00:57:58

标签: r igraph

我有一个演员名单:

name <- c('John Doe','Peter Gynn','Jolie Hope')
age <- c(26 , 32, 56)
postcode <- c('4011', '5600', '7700')
actors <- data.frame(name, age, postcode)

        name age postcode
1   John Doe  26     4011
2 Peter Gynn  32     5600
3 Jolie Hope  56     7700

我还有一份关系清单:

from <- c('John Doe','John Doe','John Doe', 'Peter Gynn', 'Peter Gynn', 'Jolie Hope')
to <- c('John Doe', 'John Doe', 'Peter Gynn', 'Jolie Hope', 'Peter Gynn', 'Frank Smith')
edge <- data.frame(from, to)

        from          to
1   John Doe    John Doe
2   John Doe    John Doe
3   John Doe  Peter Gynn
4 Peter Gynn  Jolie Hope
5 Peter Gynn  Peter Gynn
6 Jolie Hope Frank Smith

首先,我想在我的边缘列表中消除自引用,即我的边缘中的1,2,5行&#39;数据帧。

non.self.ref <- edge[!(edge$from == edge$to),]

不会产生预期的结果。

其次,edge包含一个不在&#39; actor中的名字。数据框(&#39;弗兰克史密斯&#39;)。我想补充一下弗兰克史密斯&#39;我的演员&#39;数据框,即使我没有“弗兰克史密斯”的年龄或邮政编码数据。例如:

         name age postcode
1    John Doe  26     4011
2  Peter Gynn  32     5600
3  Jolie Hope  56     7700
4 Frank Smith  NA       NA

我会感激一个整洁的解决方案!

2 个答案:

答案 0 :(得分:1)

以下是这两个部分的 void arithmetic (int *a, int n, int *b) { int *arr1; arr1=a; int *arr2; arr2=b; int i; for(i = 0; i < n; i++) { *arr1 = *(((a + i) + 6) % 10); *arr2 = *arr1; } }//don't know if the function is correct. 解决方案,但一般情况下不要在每个问题上提出多个问题。

  1. 第一部分相当简单。 tidyverse允许使用非常直观的语法,仅指定您希望保留filter不等于from的行。
  2. 第二部分有点复杂。首先我们to向上gatherfrom列,因此所有参与者都在一列中。然后我们使用to给我们留下一个包含唯一actor名称的列tbl。最后,我们可以使用distinct来组合表格。 full_join保留两个表中的所有行和列,默认情况下匹配共享名称列,如果没有数据则填充full_join(因为没有Frank)。
  3. NA

    reprex package(v0.2.0)创建于2018-03-02。

答案 1 :(得分:0)

我发现包括stringsAsFactors = FALSE例如

edge <- data.frame(from, to, stringsAsFactors = F)

然后:

non.self.ref <- edge[!(edge$from == edge$to),]

作品!