【问题标题】:Keeping rows for identical columns in a data.table in R在R中的data.table中保留相同列的行
【发布时间】:2017-06-21 13:28:05
【问题描述】:

我有一张这样的表:

DT <-data.table(ID=c(1:4),AREA=c("a","b","c","d"),PARTNER=c("f","b","g","d"),OBS_VALUE=c(10,5,13,0))

因此,我想获取 AREA 和 PARTNER 相等且 OBS_VALUE 不等于 0 或 NA 的记录。

如果两列相同,则全局测试相同的函数。

setkeyv(DT,c("AREA","PARTNER"))
identical(DT['AREA'],DT['PARTNER'])

结果显然是 FALSE。

我不知道如何到达目标。感谢您的帮助。

收到的答案

DT[REF_AREA==COUNTERPART_AREA & !is.na(OBS_VALUE) & OBS_VALUE!=0] 

给出错误信息:

Error in Ops.factor(REF_AREA, COUNTERPART_AREA) : 
  level sets of factors are different

确实我的data.Table更复杂:

dput(head(diagonal))
structure(list(TIME_PERIOD = c(2010L, 2010L, 2010L, 2010L, 2010L, 
2010L), REF_AREA = structure(c(1L, 1L, 1L, 1L, 1L, 1L), .Label = c("AT", 
"BE", "BG", "CY", "CZ", "DE", "DK", "EE", "ES", "FI", "FR", "GB", 
"GR", "HR", "HU", "IE", "IT", "LT", "LU", "LV", "MT", "NL", "PL", 
"PT", "RO", "SE", "SI", "SK"), class = "factor"), COUNTERPART_AREA =     structure(c(20L, 20L, 20L, 20L, 20L, 20L), .Label = c("4A", "4F", "4S", "9A", 
"A1", "A2", "A5", ... "AT", ..., "W1"), class = "factor"), 
, .Names = c("TIME_PERIOD", "REF_AREA", "COUNTERPART_AREA", "UNIT_MEASURE", "INT_ACC_ITEM", "ACCOUNTING_ENTRY", "OBS_VALUE", "OBS_COMMENT", "DECIMALS", "UNIT_MULT", "i.CONF_STATUS", "i.OBS_STATUS"), sorted = c("REF_AREA", "COUNTERPART_AREA"), class = c("data.table", "data.frame"), row.names = c(NA, -6L), .internal.selfref = <pointer: 0x07d424a0>)

有什么想法吗?

【问题讨论】:

标签: r function data.table


【解决方案1】:
DT[AREA==PARTNER & !is.na(OBS_VALUE) & OBS_VALUE!=0]

【讨论】:

  • 谢谢。我更新了问题。由于因素问题,您的线路出现错误
  • 所以 data.table 不是您发布的那个?您能否提供一个重现您遇到的错误的 data.table?
  • 对不起,我还不够熟练。我解决了它改变字符中的因素。然后就可以了。
【解决方案2】:

使用dplyr

library(dplyr)

DT <-data.frame(ID=c(1:4),AREA=c("a","b","c","d"),PARTNER=c("f","b","g","d"),OBS_VALUE=c(10,5,13,0), stringsAsFactors = FALSE)

DT %>% 
  filter(AREA == PARTNER & OBS_VALUE != 0 & !is.na(OBS_VALUE))

【讨论】:

    猜你喜欢
    • 2014-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多