【问题标题】:Combine 2 elements out of a named list in R从R中的命名列表中组合2个元素
【发布时间】:2016-03-24 10:47:44
【问题描述】:

我想从命名列表中取出 2 个元素,对其应用一个函数,然后将其放入一个矩阵中,其中行名和列名分别是组合的第一个和第二个元素的名称。 例如,我有这个命名列表:

input <- list(a="tom", b="dick", c="harry")

作为组合元素的函数,我将使用paste0 矩阵的结果将是:

  a         b           c          
a NA    "tomdick"   "tomharry" 
b NA       NA       "dickharry"         
c NA       NA          NA

我已经尝试过combn,但是我得到了:

> combn(input, 2, FUN=function(x) paste0(x[1], x[2]))
[1] "tomdick"   "tomharry"  "dickharry"

我该怎么做?

【问题讨论】:

  • 也许只是outer(input, input, paste0)?我不明白为什么您不希望结果中包含所有其余组合 - 因为在您想要的结果中表示了所有 3 个元素。你还没有解释那部分。

标签: r list combinations


【解决方案1】:

一定有更好的方法。但是你可以这样做。

创建一个空数据框:

d <- data.frame(matrix(NA, nrow = length(input), ncol = length(input)))
colnames(d) <- rownames(d) <- names(input)
d
   a  b  c
a NA NA NA
b NA NA NA
c NA NA NA

for循环填写姓名:

for(i in row.names(d)){
for(j in colnames(d)){
d[i, j] <- paste0(input[i], input[j])
}}

将矩阵下部的名称替换为 NAs

d[lower.tri(d, diag = T)] <- NA
d
     a       b         c
a <NA> tomdick  tomharry
b <NA>    <NA> dickharry
c <NA>    <NA>      <NA>

【讨论】:

    【解决方案2】:

    结合@David Arenburg 的评论和@Jimbou 的回答,

    input <- list(a="tom", b="dick", c="harry")
    result <- outer(input, input, paste0)
    result[lower.tri(result,diag = T)] <- NA
    

    名称结果存储您发布的矩阵。

    【讨论】:

      猜你喜欢
      • 2016-12-03
      • 2022-07-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-17
      • 1970-01-01
      • 2023-01-28
      • 1970-01-01
      • 2021-11-29
      相关资源
      最近更新 更多