如何组合r中数据框中列表中的唯一元素

时间:2017-09-11 14:17:33

标签: r

我有一个数据框DF:

         DF=data.frame(index=1:6,pos=I(list(c(21, 22, 24),c(21, 24),c(21, 22, 23, 24), 26, c(1, 21),c(14, 21, 23))))

数据结构:

str(DF)

'data.frame':   6 obs. of  2 variables:
 $ index: int  1 2 3 4 5 6
 $ pos  :List of 6
  ..$ : int  21 22 24
  ..$ : int  21 24
  ..$ : int  21 22 23 24
  ..$ : int 26
  ..$ : int  1 21
  ..$ : int  14 21 23

我想生成一个列来保存唯一元素,方法是将第一行与后续行组合在一起,并仍作为列表。所以预期的结果是:

         index            pos       result
           1     21, 22, 24         21, 22, 24
           2         21, 24         21, 22, 24
           3 21, 22, 23, 24     21, 22, 23, 24
           4             26     21, 22, 24, 26
           5          1, 21      1, 21, 22, 24
           6     14, 21, 23     14, 21, 22, 23, 24

"结果"中的第一行column与" pos"相同,第二行是通过组合" pos"的第一行和第二行的唯一元素列表。列,...我期望列的模式和类"结果"与" pos"相同。 感谢任何帮助。

1 个答案:

答案 0 :(得分:2)

您希望将函数(union)应用于列表列的每个元素以及同一列表列的第一个元素。这就是Map的用途:

Map(union, DF$pos[1], DF$pos)
# [[1]]
# [1] 21 22 24
# 
# [[2]]
# [1] 21 22 24
# 
# [[3]]
# [1] 21 22 24 23
# 
# [[4]]
# [1] 21 22 24 26
# 
# [[5]]
# [1] 21 22 24  1
# 
# [[6]]
# [1] 21 22 24 14 23

如果要对生成的元素进行排序并将它们分配给新列,可以使用:

DF$result <- Map(function(...) sort(union(...)), DF$pos[1], DF$pos)