r - 在列 R 中包含列表元素

我想将列表元素按组添加到列中。下面是一个可重现的例子。你知道如何实现吗?

library(data.table)
a <- c("A","A","A","A","B","B","C","C","C","D") 
b <- seq(1,10)

dt <- data.table(a,b)

list <- c(15,10,9,120)

dt <- data.table(a,b, c(15,15,15,15,10,10,9,9,9,120))
View(dt)

最佳答案

使用rleid:

dt[,new:=list[rleid(a)]][]

         a     b    V3   new
    <char> <int> <num> <num>
 1:      A     1    15    15
 2:      A     2    15    15
 3:      A     3    15    15
 4:      A     4    15    15
 5:      B     5    10    10
 6:      B     6    10    10
 7:      C     7     9     9
 8:      C     8     9     9
 9:      C     9     9     9
10:      D    10   120   120

注意list是保留关键字,尽量不要将其作为变量使用,以免混淆。

性能比较:

microbenchmark::microbenchmark(dt[, new := list[match(a, unique(a))]],dt[,new:=l[rleid(a)]],dt[,new:=l[.GRP],a],dt[, c := rep(list, rle(dt$a)$l)])
Unit: microseconds
                                       expr   min     lq    mean median     uq    max neval
 dt[, `:=`(new, list[match(a, unique(a))])] 186.0 200.65 269.513 223.90 298.15  700.3   100
               dt[, `:=`(new, l[rleid(a)])] 184.9 202.00 248.979 221.85 267.50  650.4   100
                dt[, `:=`(new, l[.GRP]), a] 347.4 365.70 466.369 396.35 540.40 1186.4   100
      dt[, `:=`(c, rep(list, rle(dt$a)$l))] 204.8 223.85 300.685 257.50 326.95  903.5   100

https://stackoverflow.com/questions/71380464/

相关文章:

npm - 如何在计算机之间迁移已安装的 npm 包?

node.js - 在 Vue JS 项目上运行 npm run server 时出现错误

azure-functions - VS2022 无法创建 Azure Functions 项目

python - 从现有数据框中列的子字符串创建新的 Pyspark 数据框

reactjs - 如何将主页的页眉和页脚与 react 中的管理页面中的显示分开

ruby-on-rails - 安装带有 native 扩展 Gem::Ext::BuildErro

javascript - React.js,列表中的每个 child 都应该有一个唯一的 "key"

amazon-web-services - 如何放弃 AWS lambda 函数内联编辑器中的更改?

r - 在 R 中每月计算唯一值

kubernetes - 在 WSL2 中安装 Minikube 集群时无法访问已部署的服务