当前位置: 首页 > 知识库问答 >
问题:

R data.table生成每列的唯一值

凤经国
2023-03-14

我有一个data.table,我需要生成另一个data.table,它只列出每列的唯一值。一个例子:

> sourceDT <- data.table(ID = c(1,2,3,4), date = c(ymd("20110101"),ymd("20110101"),ymd("20130101"),ymd("20150101")), text = c("A","B","C","C"))
> sourceDT
   ID       date text
1:  1 2011-01-01    A
2:  2 2011-01-01    B
3:  3 2013-01-01    C
4:  4 2015-01-01    C

> outputDT <- data.table(ID = c(1,2,3,4),date = c(ymd("20110101"),ymd("20130101"),ymd("20150101"),NA), text = c("A","B","C",NA))
> outputDT
   ID       date text
1:  1 2011-01-01    A
2:  2 2013-01-01    B
3:  3 2015-01-01    C
4:  4       <NA>   NA

实现这一点最有效的方法是什么?

共有2个答案

厍晋鹏
2023-03-14

这就是我理解你的问题,你拥有的演示与你在回应我的评论时所解释的并不完全匹配。

这将在每一列中查找重复项,并将任何一个设置为NA,从而保持< code>data.table的大小。

library(data.table)
library(lubridate)
sourceDT <- data.table(ID = c(1,2,3,4), date = c(ymd("20110101"),ymd("20110101"),ymd("20130101"),ymd("20150101")), text = c("A","B","C","C"))


for (i in seq_along(sourceDT)) {
  dupes <- which(duplicated(sourceDT[[i]]))
  if (length(dupes > 0)) {
    set(sourceDT, dupes, i, NA)
  }
}

#    ID       date text
# 1:  1 2011-01-01    A
# 2:  2       <NA>    B
# 3:  3 2013-01-01    C
# 4:  4 2015-01-01   NA
松波
2023-03-14

你可以做的一种方法:(虽然我想不是很有效:)

sourceDT[,lapply(.SD, function(x)sort(`is.na<-`(x,duplicated(x)),na.last = T))]
   ID       date text
1:  1 2011-01-01    A
2:  2 2013-01-01    B
3:  3 2015-01-01    C
4:  4       <NA>   NA
 类似资料:
  • 问题 你想随机生成一个唯一的标识符。 解决方案 可以根据一个随机数值生成一个 Base 36 编码的字符串。 uniqueId = (length=8) -> id = "" id += Math.random().toString(36).substr(2) while id.length < length id.substr 0, length uniqueId() # =

  • 问题内容: 这个问题已经在这里有了答案 : 具有唯一值的排列 (19个答案) 7年前关闭。 我正在寻找列表的唯一排列,x = [“ $ 5”,“ $ 10”,“ $ 10”,“ TAX”,“ $ 5”,“ 20%”,“ BOGO”,“ BOGO”,“ TAX “](9人一组) 我目前正在做的是 但是,这需要很长时间才能运行,我想知道是否有人可以为我提供更有效的解决方案。 问题答案: 这将花费很长时

  • 我正在努力寻找/整合我在网上找到的任何解决方案,以帮助为每个div生成一个独特的类。例如,如果将div称为“gallery-div”,并将1添加到每个div中,例如gallery-div1、gallery-div2、gallery-div3等,则会很好。 这是我目前拥有的(还没有设置唯一的类): null null 我之所以不只是更改当前的div类,是因为我将div保存在一个单独的文件中,该文件可

  • 我的数组包含从0到整数的随机唯一数。最大值。 如何生成唯一的id/签名(int)来唯一地标识每个数组,而不是搜索每个数组并检查每个数字。 例如 每个数组可以有不同的长度,但数字在数组中不重复,可以在其他数组中重复。每个数组的唯一id的目的是通过id来识别它,以便快速进行搜索。数组包含组件的id,数组的唯一签名/id将标识其中包含的组件。 此外,无论数组中的值的顺序如何,生成的id应该是相同的。像{

  • 接口说明 生成邀请成员时生成链接的唯一键 如需调用,请访问 开发者文档 来查看详细的接口使用说明 该接口仅开放给已获取SDK的开发者 API地址 GET /permissions/api/team/v1.0.0/generateTeamUniquekey 是否需要登录 是 请求字段说明 参数 类型 请求类型 是否必须 说明 token string header 是 当前登录用户的TOKEN 响应

  • 接口说明 生成邀请成员时生成链接的唯一键 如需调用,请访问 开发者文档 来查看详细的接口使用说明 该接口仅开放给已获取SDK的开发者 如开启https功能,请求地址的协议应改为https,如:https://www.example.com/wish3dearth/api/access/v1.0.0/getLicenseInfo API地址 GET /permissions/api/team/v1.