我有一个数据框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"相同。 感谢任何帮助。
答案 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)