【问题标题】:Replacing list elements with numbers while retaining original names in R用数字替换列表元素,同时保留 R 中的原始名称
【发布时间】:2017-01-30 17:45:23
【问题描述】:

我在 R 中有一个名为 Cell.Arrangement 的列表,其中包含 9 种不同的单元格排列类型。我试图用数字 1-9 替换这些排列,同时为了通过神经网络拟合它们,但我需要保留数字对应的索引,以便可以读取输出。

列表的前几个元素是这样的:

[[1]]
[1] "Chains"  "Pairs"   "Singles"

[[2]]
character(0)

[[3]]
character(0)

[[4]]
character(0)

[[5]]
[1] "Singles"

[[6]]
[1] "Tetrad"

...而期望的结果是这样的...

[[1]]
[1] 1 2 3

[[2]]
character(0)

[[3]]
character(0)

[[4]]
character(0)

[[5]]
[1] 1

[[6]]
[1] 4

...每个单元格排列分类对应一个数字,但可以匹配回来。

我有以下代码,但它不是用整个列表中的唯一编号替换排列,而是用每个元素中的唯一编号替换排列,因此不同的排列匹配相同的编号...

RL_AR <- function(x){
  if(length(levels(factor(Data$Cell.Arrangement[[x]]))) > 0){ 
    as.vector(factor(Data$Cell.Arrangement[[x]], labels = c(1:length(Data$Cell.Arrangement[[x]]))))
  }else{
    as.vector(factor(Data$Cell.Arrangement[[x]], labels = ''))
  }
}

AR.Index <- data.frame(unique(unlist(Data$Cell.Arrangement)))

有什么建议吗?谢谢!

【问题讨论】:

  • 您的列表似乎没有名称,所以我不确定您所说的“同时保留原始名称”是什么意思。你能显示你正在寻找的输出吗?与dput() 共享您的数据也很好,因此可以复制/粘贴。您可以在帖子中添加dput(head(your_list)) 吗?
  • 意外提交的问题。现在已经完成,显示的是实际列表而不是 dput()
  • 是的,您能否将dput 添加到您的问题中,以便更容易重现?您是否已经在单元格排列分类和数字之间进行了查找匹配?还是创建您所说的“保留原始名称”?
  • 最后,如果您要将所有字符串转换为整数,您确定要在空元素中使用character(0) 而不是integer(0) 或numeric(0)?

标签: r list indexing


【解决方案1】:

我先做一个唯一排列的向量,然后用这个向量,把每一个字符串变成对应的数字(向量中的位置arr)

lst <- list(c("Chains",  "Pairs",   "Singles"),
     character(0),
     character(0),
     character(0),
     c("Singles"),
     c("Tetrad")
)

arr <- unique(unlist(lst))

lapply(lst, function(x) match(x,arr))

【讨论】:

    猜你喜欢
    • 2012-09-20
    • 1970-01-01
    • 2021-01-30
    • 2020-10-07
    • 2020-07-08
    • 1970-01-01
    • 1970-01-01
    • 2022-01-22
    • 1970-01-01
    相关资源
    最近更新 更多