gpt4 book ai didi

r - 操作 R 中字符列表的列表

转载 作者:行者123 更新时间:2023-12-05 05:21:14 27 4
gpt4 key购买 nike

我有一个未命名的逗号分隔字符列表的列表:

> list
[[1]]
[1] "A" "B" "C" "D"

[[2]]
[1] "E" "F" "G"

实际的列表很长,其中的每个字符列表都是随机长度的,并且包含不同的、不可预测的字符组合。我需要对所有字符列表的每个元素应用三件事:

  • 有条件地删除元素,比如所有等于“A”的元素
  • 有条件地替换元素,比如所有等于“A”和“B”的元素
  • 如果任何元素包含“/”,例如等于“A/BCD”的元素,然后删除“/”右侧的所有内容,包括“/”本身,以便在该特定情况下我以“A”结尾。

我是 R 的新手,我猜这是一项微不足道的任务。如果有人愿意帮助我,我会很高兴!干杯:)

最佳答案

要对列表执行任何操作,您可以使用 apply 系列对其进行循环。使用 lapply 你会得到一个列表,这就是你想要的。 lapply 将列表作为第一个参数,然后是您真正想要的任何类型的函数。

那么让我们从:

mylist <- list(
LETTERS[1:4],
LETTERS[5:7],
c("A/BCD","H","J")
)

在列表的每个元素中删除 "A" 是这样的:

lapply(mylist, function(x) x[x!="A"])

替换元素应该是这样的:

lapply(mylist, function(x) {
id <- x == "B"
x[id] <- "F"
return(x)
})

可以使用 gsub 编辑每个元素中的值,如下所示:

lapply(mylist, function(x){
gsub("/.+","",x)
})

您可以将所有内容组合在一个函数中,然后将该函数应用于列表。您不必在 lapply 调用中将其创建为匿名函数,您可以预定义它然后像这样使用它:

cleanup <- function(x){
x <- gsub("/.+","",x) # remove extra info
id <- x %in% c("A","H")
x[id] <- "F"
return(x)
}

lapply(mylist, cleanup)

原则始终相同:每次我创建一个匿名函数,该函数将一个向量作为输入并返回适配向量作为输出。 lapply 将确保将这些不同的元素重新组合成一个列表。

关于r - 操作 R 中字符列表的列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43292666/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com