【发布时间】:2017-05-12 02:17:36
【问题描述】:
假设我有一个 data.table,例如:(或带有数字和 NA)
temp <- data.table(M=c(NA,T,T,F,F,F,NA,NA,F),
P=c(T,T,T,F,F,F,NA,NA,NA), S=c(T,F,NA,T,F,NA,NA,NA,NA))
M P S
NA TRUE TRUE
TRUE TRUE FALSE
TRUE TRUE NA
FALSE FALSE TRUE
FALSE FALSE FALSE
FALSE FALSE NA
NA NA NA
NA NA NA
FALSE NA NA
我想检查一个变量是否为 NA 是否意味着第二个变量的值也都是 NA。检查某些变量是否链接到其他变量。
例如,只要 P=NA,我们也有 S=NA。
此代码适用于两个单列:
temp[is.na(P),all(is.na(S))]
给出正确的
和
temp[is.na(S),all(is.na(P))]
给出 FALSE,因为第六行是 S=NA 但 P!=NA。
现在我的问题。
我想概括一下,检查我的 data.table 中的所有对并打印“链接”的对。
我宁愿只打印 TRUE 的结果,忽略 FALSE 的结果,因为我的真实 data.table 中的大多数对都不会链接,而且我有 550 个变量。
我试过这段代码:
temp[, lapply(.SD, function(x) temp[is.na(x),
lapply(.SD, function(y) all(is.na(y)) )]]
我收到此错误
错误:意外']' in:“temp[, lapply(.SD, function(x) temp[is.na(x), lapply(.SD, function(y) all(is.na(y)) )]]"
我可以尝试使用 for 循环,但我更喜欢典型的 data.table 语法。 欢迎提出任何建议。
我还想知道在嵌套 data.table 调用时如何引用两个不同的 .SD。
【问题讨论】:
标签: r data.table