首页 > 解决方案 > 在 r 中的 data.table 中折叠具有互补列数据的行

问题描述

我需要折叠 data.table 中的部分重复行

例子:

  df.in <- data.table (
  tkr = c("abc", "abc", "def", "def", "ghi", "ghi"),
  lboq = c(0,296, -390, 0,  -88, 0),
  locq = c(-296,0, 0, 390, 0, 88),
  ap = c(134,134, 23, 23, 17, 17)
  )

     tkr lboq locq  ap
  1: abc    0 -296 134
  2: abc  296    0 134
  3: def -390    0  23
  4: def    0  390  23
  5: ghi  -88    0  17
  6: ghi    0   88  17

使用这个例子,我想得到三行,其中第二行折叠成第一行,第 2 列有 296;第 4 行的 390 将位于第 3 行的第 3 列,依此类推。

所以想要的结果是:

  df.out <- data.table (
  tkr = c("abc", "def", "ghi"), 
  lboq = c(296, -390, -88),
  lbcq = c(-296, 390, 88),
  ap = c(134, 23, 17)
  )

     tkr lboq lbcq  ap
  1: abc  296 -296 134
  2: def -390  390  23
  3: ghi  -88   88  17

我已经研究了以下反应,表明反应:

折叠data.table中2个不同列中的行?

折叠 data.table 中的行

尽管有上述两个标题,但它们看起来更像是扩张而不是崩溃

我还在下面探索了使用合并,但这似乎仅适用于列;行有合并吗?

将具有交替缺失值的两个字符串列合并为一个

在编程中使用 dplyr coalesce

如何在数据帧上使用 Coalesce 函数

然后我看着

R总结折叠的Data.Table

但是这里的折叠已经完成,需要总结;我需要做崩溃

这看起来正是我需要的

将数据帧的互补行与 R 合并

但使其适应我的使用似乎不起作用:

    df.in %>%
      group_by(tkr, ap) %>%
      summarise_all(funs(sort(.)[1]))

我错过了什么?

标签: r

解决方案


也许这会有所帮助:

library(dplyr)

df.in %>%
  group_by(tkr) %>%
  summarise(across(lboq:ap, ~.x[.x != 0][1]))

#  tkr    lboq  locq    ap
#* <chr> <dbl> <dbl> <dbl>
#1 abc     296  -296   134
#2 def    -390   390    23
#3 ghi     -88    88    17

对于每个tkrthis 选择 columns 中的第一个非零值lboq:ap


推荐阅读