R'中列表列的排序元素;s数据表

R'中列表列的排序元素;s数据表,r,data.table,R,Data.table,我需要按字母顺序对data.table的“list”列的元素进行排序,并将它们强制为R的data.table的另一个中间列中的字符向量。目前,无法发现第一行的错误 以下代码用于生成原始data.table: my_dt在对列表元素进行排序之前,您可以简化代码并使用unlist my_dt[, D := toString(sort(unlist(C))), by = 1:nrow(my_dt)][] # A B C

我需要按字母顺序对data.table的“list”列的元素进行排序,并将它们强制为R的data.table的另一个中间列中的字符向量。目前,无法发现第一行的错误

以下代码用于生成原始data.table:


my_dt在对列表元素进行排序之前,您可以简化代码并使用
unlist

my_dt[, D := toString(sort(unlist(C))), by = 1:nrow(my_dt)][]
#    A         B                C                  D
# 1: 1  9.245525 mango,pear,apple apple, mango, pear
# 2: 2 10.195239 mango,pear,apple apple, mango, pear
# 3: 3 13.277489 mango,pear,apple apple, mango, pear
# 4: 4  8.248815 mango,pear,apple apple, mango, pear
# 5: 5 10.243520 mango,pear,apple apple, mango, pear
# 6: 1 12.724261 mango,pear,apple apple, mango, pear
# 7: 2  9.530758 mango,pear,apple apple, mango, pear
# 8: 3  7.893234 mango,pear,apple apple, mango, pear
# 9: 4  8.260433 mango,pear,apple apple, mango, pear
#10: 5  9.219746 mango,pear,apple apple, mango, pear
#11: 1  8.305300 mango,pear,apple apple, mango, pear
#12: 2  9.478721 mango,pear,apple apple, mango, pear
#13: 3  9.171161 mango,pear,apple apple, mango, pear
#14: 4  9.633898 mango,pear,apple apple, mango, pear
#15: 5 10.814112 mango,pear,apple apple, mango, pear

如果列
D
应该是列表列,请执行以下操作

my_dt[, D := list(list(sort(unlist(C)))), by = 1:nrow(my_dt)]
my_dt

请参阅帖子:

您可以简化代码,并在对列表元素进行排序之前使用
取消列表

my_dt[, D := toString(sort(unlist(C))), by = 1:nrow(my_dt)][]
#    A         B                C                  D
# 1: 1  9.245525 mango,pear,apple apple, mango, pear
# 2: 2 10.195239 mango,pear,apple apple, mango, pear
# 3: 3 13.277489 mango,pear,apple apple, mango, pear
# 4: 4  8.248815 mango,pear,apple apple, mango, pear
# 5: 5 10.243520 mango,pear,apple apple, mango, pear
# 6: 1 12.724261 mango,pear,apple apple, mango, pear
# 7: 2  9.530758 mango,pear,apple apple, mango, pear
# 8: 3  7.893234 mango,pear,apple apple, mango, pear
# 9: 4  8.260433 mango,pear,apple apple, mango, pear
#10: 5  9.219746 mango,pear,apple apple, mango, pear
#11: 1  8.305300 mango,pear,apple apple, mango, pear
#12: 2  9.478721 mango,pear,apple apple, mango, pear
#13: 3  9.171161 mango,pear,apple apple, mango, pear
#14: 4  9.633898 mango,pear,apple apple, mango, pear
#15: 5 10.814112 mango,pear,apple apple, mango, pear

如果列
D
应该是列表列,请执行以下操作

my_dt[, D := list(list(sort(unlist(C)))), by = 1:nrow(my_dt)]
my_dt

从帖子中可以看到:

谢谢马库斯,我认为这很有效。您能详细介绍一下toString函数吗?我是否正确地注意到,在“by”参数中使用1:nrow(my_dt)通常是避免循环的一种优雅方式?如果有人能告诉我在我的方法中哪里发生了错误,我也将不胜感激。再次感谢。@ds\u新手我正要删除答案,因为
toString
resturns-惊喜-一个字符串,而不是代码中的列表。
by=1:nrow(my_dt)
代码只是表示我们正在按行工作。这有帮助吗?@ds_newbie type
toString.default
查看源代码。。。基本上,它是一个用于粘贴(x,collapse=“,”)的包装器
Yes,Markus,toString()结果是一个字符向量,我可以很好地处理它。下一步实际上是将“排序”条目列转换为字符向量。但是,我不确定我在问题中共享的代码中可能出现的错误。谢谢Markus,我认为这是可行的。您能详细介绍一下toString函数吗?我是否正确地注意到,在“by”参数中使用1:nrow(my_dt)通常是避免循环的一种优雅方式?如果有人能告诉我在我的方法中哪里发生了错误,我也将不胜感激。再次感谢。@ds\u新手我正要删除答案,因为
toString
resturns-惊喜-一个字符串,而不是代码中的列表。
by=1:nrow(my_dt)
代码只是表示我们正在按行工作。这有帮助吗?@ds_newbie type
toString.default
查看源代码。。。基本上,它是一个用于粘贴(x,collapse=“,”)的包装器Yes,Markus,toString()结果是一个字符向量,我可以很好地处理它。下一步实际上是将“排序”条目列转换为字符向量。但是,我不确定我在问题中共享的代码中可能出现的错误。
my_dt[, D := list(list(sort(unlist(C)))), by = 1:nrow(my_dt)]
my_dt