多个有序的strsplit,然后重新组合

多个有序的strsplit,然后重新组合,r,sapply,strsplit,R,Sapply,Strsplit,给定一个字符串向量,其中每个字符串是以逗号分隔的物种名称列表(即属物种)。每个字符串中的物种数量可变(例如,如下面的示例所示,给定字符串中的物种数量范围为1到3) trees这里是一个通过Base R实现的想法 sapply(strsplit(trees, ' '), function(i) toString(i[c(TRUE, FALSE)])) #[1] "Erythrina" "Erythrina, Terminalia" "Erythrina, Terminalia

给定一个字符串向量,其中每个字符串是以逗号分隔的物种名称列表(即属物种)。每个字符串中的物种数量可变(例如,如下面的示例所示,给定字符串中的物种数量范围为1到3)


trees这里是一个通过Base R实现的想法

sapply(strsplit(trees, ' '), function(i) toString(i[c(TRUE, FALSE)]))
#[1] "Erythrina"    "Erythrina, Terminalia"         "Erythrina, Terminalia, Chloroleucon"
编辑

除了您的评论之外,对于新的
,您只需

sapply(strsplit(trees, ', '), function(i) toString(sub('\\s+.*', '', i)))
#[1] "Erythrina, Juglans"               "Erythrina"                       
#[3] "Erythrina, Juglans, Chloroleucon"

这是一个通过Base R实现的想法

sapply(strsplit(trees, ' '), function(i) toString(i[c(TRUE, FALSE)]))
#[1] "Erythrina"    "Erythrina, Terminalia"         "Erythrina, Terminalia, Chloroleucon"
编辑

除了您的评论之外,对于新的
,您只需

sapply(strsplit(trees, ', '), function(i) toString(sub('\\s+.*', '', i)))
#[1] "Erythrina, Juglans"               "Erythrina"                       
#[3] "Erythrina, Juglans, Chloroleucon"

原始问题中显示的方式是正确的。向量中的每个字符串都可以具有可变长度的物种数。我对问题进行了编辑,以提高这方面的清晰度。将来,如果可能的话,这将是一个更好的列表结构。这样:
树在原始问题中的显示方式是正确的。向量中的每个字符串都可以具有可变长度的物种数。我对问题进行了编辑,以提高这方面的清晰度。将来,如果可能的话,这将是一个更好的列表结构。像这样:
trees对于我给出的示例,这非常有效。我只是在我的完整数据集上尝试了一下,但它让我意识到,我有一些物种是杂交的,可能在列表中:我编辑了原始问题的树木包括了这个。对不起,我都不知道名单上有那些混合动力车!您的解决方案似乎只适用于示例,因为示例恰好在每个元素中添加了一个物种。我刚刚重新排列了“树”的元素,您的解决方案给出了相同的答案。试试:好的,几分钟后再修改。在将来,请确保您在示例中包含所有“角落”案例。对于我给出的示例,这非常有效。我只是在我的完整数据集上尝试了一下,但它让我意识到,我有一些物种是杂交的,可能在列表中:我编辑了原始问题的树木包括了这个。对不起,我都不知道名单上有那些混合动力车!您的解决方案似乎只适用于示例,因为示例恰好在每个元素中添加了一个物种。我刚刚重新排列了“树”的元素,您的解决方案给出了相同的答案。试试:好的,几分钟后再修改。今后,请确保在示例中包含所有“角落”案例
sapply(strsplit(trees, ', '), function(i) toString(sub('\\s+.*', '', i)))
#[1] "Erythrina, Juglans"               "Erythrina"                       
#[3] "Erythrina, Juglans, Chloroleucon"