如何从R中的字符串列表中删除一个元素

Posted

技术标签:

【中文标题】如何从R中的字符串列表中删除一个元素【英文标题】:How to delete an element from a list of strings in R 【发布时间】:2013-07-15 01:51:39 【问题描述】:

在一些不太相关的其他人中,我检查了以下两个答案:Answer 1Answer 2

但是,那里提出的解决方案没有帮助。

我可能误解了自己的问题并试图以错误的方式做正确的事。感谢您的帮助。

我有以下代码在其中构建字符串列表并尝试删除列表的第二个元素:

> my_strings <- "string1 string2 string3 string4 string5"
> my_list <- strsplit(my_strings,split=" ")
> #Now trying to delete one element from my_list using positive indexing
>
> my_list[[2]] <- NULL #does not work
> my_list[2] <- NULL #nope. Doesn't work either
> my_list[[1]][2] <- NULL #error: replacement has length zero
> my_list[[1]][[2]] <- NULL # error: more elements supplied than there are to replace

所以,我的问题是:如何删除 my_list 的第二个元素(或多个元素,如 1 和 3)? my_list 的元素没有命名,我想通过数字索引来访问它们。

【问题讨论】:

mylist[[1]] &lt;- mylist[[1]][-2]。我建议阅读一下 R 中子集和列表的工作方式。 带回家的消息:使用子集而不是分配NULL 非常感谢贾斯汀(和罗兰)。使用您显示的范围而不是负索引的行非常适合我的目的。我试图用“ 子集确实非常适合处理字符串列表。您可以使用带有正索引(mylist[[1]][3:7] 保留元素 3 到 7)或负索引(mylist[[1]][-3:-7] 丢弃元素 3 到 7)的范围。再次感谢您! 更新:索引范围的变量确实有效,但您必须保证“两个”索引都是负数或正数。例如,mylist[[1]][var1:var2] 仅在两个索引都是正数或负数时才有效。 【参考方案1】:

我不确定您是否打算使用您的代码创建向量列表;仅使用字符向量可能更容易。尝试先使用 unlist:

my_list <- unlist(strsplit(my_strings,split=" "))

my_list <- my_list[-2]

【讨论】:

啊,好吧。比@Justin 的回答最好。 你的答案很好,但我必须在第二行再次使用 list() ,否则我最终会得到不是列表的东西。然而,贾斯汀和罗兰提出的子集选项更吸引了我的眼球。不过我接受了你的回答,因为他们只添加了 cmets。 是的,我说错了——很抱歉造成混乱!但同样,@Justin 的解决方案听起来满足了您的需求。

以上是关于如何从R中的字符串列表中删除一个元素的主要内容,如果未能解决你的问题,请参考以下文章

如何在保留顺序的同时删除列表中的重复元素?

R语言_list()函数用法

从 R 中的字符向量中删除引号

如何删除此列表中的重复元素?

如何从熊猫数据框中的列中删除字符串值

从 R 中的列表中导出单独的文本文件