我有以下示例
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]]
错误测试如下:
Error in
[.data.table
(merged_list[[1]], merged_list[[1]][, 2] != merged_list[[1]][, : i is invalid type (matrix). Perhaps in future a 2 column matrix could return a list of elements of DT (in the spirit of A[B] in FAQ 2.14). Please report to data.table issue tracker if you'd like this, or add your comments to 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_a
, code_b
, code_c
等等。非常感谢任何有关我做错了什么以及如何解决这个问题的帮助。抱歉,标题内容不详,我不太确定这类问题是什么。
最佳答案
是的,因为正如错误消息所示,比较返回一个矩阵。
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
关于r - r 中与引用某些对象相关的 data.table 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59189529/