【问题标题】:data.table error in r related to referencing certain objects与引用某些对象相关的 r 中的 data.table 错误
【发布时间】:2019-12-05 14:45:36
【问题描述】:

我有下面的例子

a <- c("a","b","c","d","e","f")
b <- 1:6
c <- c("a","E","D","C","B","A")
d <- 10:15

dt1 <- data.table("ID" = b,"code_a" = a,"code_c" = c, "code_d" = d)
dt2 <- data.table("ID" = b, "code_c" = c, "code_d" = d )
dt3 <- data.table("ID" = b, "code_d" = d)
merged_list <- list(dt1,dt2,dt3)
output <- merged_list[[1]][merged_list[[1]][,2] != merged_list[[1]][,3]]

错误测试如下:

[.data.table(merged_list[[1]]、merged_list[[1]][, 2] != merge_list[[1]][, 中的错误: i 是无效类型(矩阵)。也许将来一个 2 列矩阵可以返回 DT 的元素列表(本着 FAQ 2.14 中的 A[B] 的精神)。如果您愿意,请向 data.table 问题跟踪器报告,或将您的 cmets 添加到 FR #657。

这里我想得到merged_list 中第一项的输出,这是一个data.table,但在给定条件下data.table 中的第二项不能等于data.table 中的第三项

我不确定为什么上述方法不起作用,但如果我使用 $code_a$code_c 而不是 [,2][,3] 它会起作用。我不想使用$ 引用,因为它在循环中不能很好地工作。

预期输出:

output
#     ID code_a code_c code_d
# 1:  2      b      E     11
# 2:  3      c      D     12
# 3:  4      d      C     13
# 4:  5      e      B     14
# 5:  6      f      A     15

因为只有第一行的code_a 等于code_c,所以它被删除了。谢谢您的帮助。我在这里的主要目标是不使用$code_a,因为我不能把它放在一个for循环中,这给了我code_acode_bcode_c等等等等。对我做错了什么以及如何解决的任何帮助非常感谢这个问题。抱歉标题没有提供信息,我不确定这种问题是什么。

【问题讨论】:

    标签: r data.table


    【解决方案1】:

    是的,因为正如错误消息所示,比较返回一个矩阵。

    merged_list[[1]][,2] != merged_list[[1]][,3]
    #     code_a
    #[1,]  FALSE
    #[2,]   TRUE
    #[3,]   TRUE
    #[4,]   TRUE
    #[5,]   TRUE
    #[6,]   TRUE
    
    class(merged_list[[1]][,2] != merged_list[[1]][,3])
    #[1] "matrix"
    

    把它变成一个向量,它应该可以工作

    merged_list[[1]][c(merged_list[[1]][,2] != merged_list[[1]][,3])]
    
    #   ID code_a code_c code_d
    #1:  2      b      E     11
    #2:  3      c      D     12
    #3:  4      d      C     13
    #4:  5      e      B     14
    #5:  6      f      A     15
    

    【讨论】:

    • 感谢您的回答,这正是我想要的。我还有一个问题。如果我让z &lt;- 1 merged_list[[z]][,4-z],那么我想做的是获得列表中的第一个data.table 并取它的第三列,它给了我3 的答案作为numeric 的答案,我该怎么做?非常感谢
    • @Kazusa12345 你需要加with = FALSE,做merged_list[[z]][, (4-z), with = FALSE]
    猜你喜欢
    • 1970-01-01
    • 2014-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-07
    • 1970-01-01
    • 1970-01-01
    • 2020-08-28
    相关资源
    最近更新 更多