【问题标题】:Set operations with dplyr::rowwise使用 dplyr::rowwise 设置操作
【发布时间】:2023-04-10 10:19:01
【问题描述】:

我正在尝试对以字符向量作为列表元素的列表变量执行集合操作(​​相交、联合、setdiff、setequal)。例如,

library(dplyr)
list1 = list(c('a', 'b'), c('x', 'y', 'z'))
list2 = list(c('b'), c('x', 'z'))
df = data_frame(x = list1, y = list2)

类似

df %>% rowwise() %>% mutate(z = setdiff(x, y))

似乎有效。但不是

df %>% rowwise() %>% mutate(z = intersect(x, y))

使用 intersect() 给出错误消息:

错误:大小不兼容 (2),需要 1(组大小)或 1

【问题讨论】:

    标签: r dplyr


    【解决方案1】:

    intersect() 第二行返回多个元素,您需要将其包装为列表以适应单元格:

    df %>% rowwise() %>% mutate(z = list(intersect(x, y)))
    
    # Source: local data frame [2 x 3]
    # Groups: <by row>
    
    #           x         y         z
    #      <list>    <list>    <list>
    # 1 <chr [2]> <chr [1]> <chr [1]>
    # 2 <chr [3]> <chr [2]> <chr [2]>
    

    【讨论】:

    • 附带说明,这同样适用于 setdiff,只是在这种特殊情况下,两行都具有 1 元素差异。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-06-28
    • 1970-01-01
    • 2016-01-10
    • 1970-01-01
    • 2019-09-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多