簡體   English   中英

將數據從一行復制到 R data.table 中的新行

[英]copy data from one row to a new row in R data.table

我有一張如下表:

library(data.table)
dt <- data.table(t0.id=1:2,t0.V1=c("a","e"),t0.V2=c("b","f"),t1.id=3:4,t1.V1=c("c","g"),t1.V2=c("d","h"))

dt
   t0.id t0.V1 t0.V2 t1.id t1.V1 t1.V2
1:     1     a     b     3     c     d
2:     2     e     f     4     g     h

我想將數據從第一行復制到新行,如下所示:

   t0.id t0.V1 t0.V2 t1.id t1.V1 t1.V2
1:     1     a     b                  
2:                       3     c     d
3:     2     e     f     4     g     h

我知道如何復制行(我看過這篇文章),但我不知道如何按條件清除列(例如 t0.id==1),因為兩行是相等的。

我想這可以通過行索引來完成,但我的真實表有數千行,我認為這不是最好的方法。

謝謝

編輯:

  • 行的最終順序無關緊要,也就是說,第 1 行和第 2 行不需要彼此相鄰。
  • 我“手動”(通過查看一些變量)確定需要拆分哪些行。 因此,要應用的唯一條件是基於“t0.id”。
library(data.table)
splitids <- 1L # t0.id
out <- rbindlist(list(
    dt[t0.id %in% splitids, .SD, .SDcols = patterns("^t0")],
    dt[t0.id %in% splitids, .SD, .SDcols = patterns("^t1")],
    dt[!t0.id %in% splitids,]),
  use.names = TRUE, fill = TRUE)
out
#    t0.id  t0.V1  t0.V2 t1.id  t1.V1  t1.V2
#    <int> <char> <char> <int> <char> <char>
# 1:     1      a      b    NA   <NA>   <NA>
# 2:    NA   <NA>   <NA>     3      c      d
# 3:     2      e      f     4      g      h

如果您查看它們中的每一個,可能會更有意義:

dt[t0.id %in% splitids, .SD, .SDcols = patterns("^t0")]
#    t0.id  t0.V1  t0.V2
#    <int> <char> <char>
# 1:     1      a      b
dt[t0.id %in% splitids, .SD, .SDcols = patterns("^t1")]
#    t1.id  t1.V1  t1.V2
#    <int> <char> <char>
# 1:     3      c      d
dt[!t0.id %in% splitids,]
#    t0.id  t0.V1  t0.V2 t1.id  t1.V1  t1.V2
#    <int> <char> <char> <int> <char> <char>
# 1:     2      e      f     4      g      h

如果您需要空白""而不是NA ,那么可以對您的character列執行此操作,但不能對t*.id列執行此操作,因為這會將它們從integer轉換為character

ischr <- which(sapply(dt, inherits, "character"))
ischr
# t0.V1 t0.V2 t1.V1 t1.V2 
#     2     3     5     6 
out[, (ischr) := lapply(.SD, fcoalesce, ""), .SDcols = ischr][]
#    t0.id  t0.V1  t0.V2 t1.id  t1.V1  t1.V2
#    <int> <char> <char> <int> <char> <char>
# 1:     1      a      b    NA              
# 2:    NA                   3      c      d
# 3:     2      e      f     4      g      h

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM