【问题标题】:Change values in a list of vectors according to a key根据键更改向量列表中的值
【发布时间】:2021-01-23 10:30:18
【问题描述】:

我有一个向量列表如下:-

a <- list(c("10002", "10003", "10004"), c("10001", "10005"),
          c("10001", "10004"), c("10003", "10005"), c("10002", "10003"))

我有一个 data.frame 如下:-

b <- data.frame(col1=c(1, 2, 3, 4, 5),
                col2=c("10001", "10002", "10003", "10004", "10005"))

所以基本上我想用bcol1 中的相应数值替换列表a 中的字符值。这样我的清单就会变成:-

c <- list(c(2, 3, 4), c(1, 5), c(1, 4), c(3, 5), c(2, 3))

提前致谢。

【问题讨论】:

    标签: r


    【解决方案1】:
    lapply(a, function(x) b$col1[match(x, b$col2)])
    
    

    替代方案:因为我在发布答案后发现我的答案与 Ronak 的答案相同

    lapply(a, function(x) ifelse(x %in% b$col2, b$col1, NA))
    

    【讨论】:

      【解决方案2】:

      你可以unlista值,matchcol2得到对应的col1值。最后我们使用relist来保持与a相同的结构。

      relist(b$col1[match(unlist(a), b$col2)], a)
      
      #[[1]]
      #[1] 2 3 4
      
      #[[2]]
      #[1] 1 5
      
      #[[3]]
      #[1] 1 4
      
      #[[4]]
      #[1] 3 5
      
      #[[5]]
      #[1] 2 3
      

      您还可以将lapplymatch 一起使用。

      lapply(a, function(x) b$col1[match(x, b$col2)])
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-07-12
        • 1970-01-01
        • 2016-08-16
        • 2022-12-22
        • 2021-10-19
        • 1970-01-01
        • 2021-10-04
        • 2021-10-10
        相关资源
        最近更新 更多