DF1是

ID CompareID Distance
1  256          0
1  834          0
1  946          0
2  629          0
2  735          1
2  108          1

预期输出应为DF2,如下所示(生成DF2的条件->在DF1中,对于任何ID(如果“Distance” == 1,则将相应的“CompareID”放入“SimilarID”列),对于“Distance” == 0,忽略对应的“CompareID”)
   ID SimilarID
    1  None
    2  735,108

比较正确完成,但输出低于输出
   ID SimilarID
    1  ?
    2  735,108

我知道,因为在“SimilarID”中没有“CompareID”-?标记显示。
我要替换这个“?”为“无”或“0”。请帮助
在某些情况下,我观​​察到的不是“?”我还可以看到“NULL”值。

谢谢 !

最佳答案

使用data.table包,其中df是您的原始数据...

library(data.table)
setDT(df)[, .(SimilarID = if(all(Distance == 0)) "None"
              else toString(CompareID[Distance == 1])), by = ID]
#    ID SimilarID
# 1:  1      None
# 2:  2  735, 108

通过返回ID来遵循您的预期输出

当所有"None"列均为零时
  • Distance
  • CompareID为1时的Distance值,以逗号分隔的字符串

  • 数据:
    df <- structure(list(ID = c(1L, 1L, 1L, 2L, 2L, 2L), CompareID = c(256L,
    834L, 946L, 629L, 735L, 108L), Distance = c(0L, 0L, 0L, 0L, 1L,
    1L)), .Names = c("ID", "CompareID", "Distance"), class = "data.frame", row.names = c(NA,
    -6L))
    

    关于r - 如何替换NULL/?在R中使用 'None'或 '0',我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39840152/

    10-12 07:20