【问题标题】:R Replace a value with a character from another data.tableR用另一个data.table中的字符替换一个值
【发布时间】:2021-09-30 13:04:01
【问题描述】:

这里我遇到了R中关于替换编码的一些问题。

这是原始的data.table。有两个数据表:

dt1 <- data.table(V1 = c(1,"A"))
dt2 <- data.table("1" = c(4,5,6), "A" = c("c","d","e"))

现在我想通过匹配关系将 dt1 中的值替换为 dt2 中的值。

期望的输出应该是:

dt3 <- data.table(V1 = c("4,5,6", "c,d,e"))

也就是说,我想将 dt1 中的值替换为 dt2 中相应列中的所有值。这是一个简单的例子,我想将它应用到R中的整个data.table。

我在处理这个问题时遇到了很大的麻烦,所以请帮助我。

【问题讨论】:

    标签: r


    【解决方案1】:

    这是从您的输入到所需输出的一种方式。

    dt1[, V1 := sapply(dt2, paste, collapse = ',')[V1]]
    
    
    # Test
    all.equal(dt1, dt3)
    [1] TRUE
    

    PS。您确定将用逗号分隔的值存储在字符串中是最好的吗?

    【讨论】:

    • 不是最好的,我稍后会拆分字符串。其实我想把V1 = c(1, "A")换成V1 = c(4, 5, 6, "a", "b", "c"),但是不知道怎么做那,所以我认为第一步是用一个包含列中所有值的字符串替换一个值。如果是这样,有没有更好的方法?
    【解决方案2】:

    我们可以做

    dt1[, V1  := unlist(lapply(V1, function(x) toString(dt2[[x]])))]
    dt1
            V1
    1: 4, 5, 6
    2: c, d, e
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-12-31
      • 2020-02-08
      • 2013-12-30
      • 1970-01-01
      • 2021-06-15
      • 2023-03-20
      • 2011-08-21
      • 2021-08-21
      相关资源
      最近更新 更多