2017-05-08 83 views
2

我有这样enter image description here 样本数据帧我试图找到2列coauthorsnacoauthors之间的交叉使用下面的代码dplyr发生变异相交不工作

interscout = 
    sample_test %>% 
    mutate(commonauth = intersect(coauthors, nacoauthors)) 

,我得到这个输出​​ 我不知道为什么我无法使用在mutate中获得常见交集。

理想情况下,最后一行应该是空的,第二行应该只有JAMES M ANDERSON交集。

这里是结构的代码。

> dput(sample_test) 
structure(list(fname = c("JACK", "JACK", "JACK"), lname = c("SMITH", 
"SMITH", "SMITH"), cname = c("JACK SMITH", "JACK A SMITH", "JACK B SMITH" 
), coauthors = list(c("AMEY S BAILEY", "JAMES M ANDERSON"), "JAMES M ANDERSON", 
    "JOHN MURRAY"), nacoauthors = list(c("AMEY S BAILEY", "JAMES M ANDERSON" 
), c("AMEY S BAILEY", "JAMES M ANDERSON"), c("AMEY S BAILEY", 
"JAMES M ANDERSON"))), row.names = c(NA, -3L), vars = list(fname, 
    lname), drop = TRUE, indices = list(0:2), group_sizes = 3L, biggest_group_size = 3L, labels = structure(list(
    fname = "JACK", lname = "SMITH"), class = "data.frame", row.names = c(NA, 
-1L), vars = list(fname, lname), drop = TRUE, .Names = c("fname", 
"lname")), class = c("grouped_df", "tbl_df", "tbl", "data.frame" 
), .Names = c("fname", "lname", "cname", "coauthors", "nacoauthors" 
)) 
+0

它会抛出一个错误因为mutate正在寻找与完整数据集具有相同输出长度的东西。你可以使用dply'intersect(sample_test $ coauthors,sample_test $ nacoauthors)之外的相交',它应该可以工作 –

回答

2

如果添加rowwise(),让你的突变列list它会工作:

interscout <- sample_test %>% 
    ungroup() %>% 
    rowwise() %>% 
    mutate(commonauth = list(intersect(coauthors, nacoauthors))) 

FWIW如果我不包括rowwise()我得到Error: not compatible with STRSXP

+0

谢谢!在这里取消组合和划分的作用是什么? – Dinesh

+0

'ungroup()'可能不是必须的,但是它是一种预防措施,因为你的'dput'描述了一个“groupped_df”。如果一个分组对你的'data_frame'有效,'mutate()'可以在分组框架内工作,而不是单独比较每一行,这可能不是你想要的。 'rowwise()'告诉mutate()'单独考虑每一行,这就是你想要进行行内比较的方式,就像这样。 – Nate