簡體   English   中英

使用 R 中的列重塑數據並生成 ID

[英]Reshaping data and generating IDs with column in R

我有以下數據:

 DF <- read.table(header = TRUE, text = "126 D1 181 N1 225 P1 A 2 B 9 A 11 D 3 B 12 A 11 " )

我想得到下表,但我很難做到

 DF <- read.table(header = TRUE, text = "ID Class D1 Time N1 126 A 2 D 3 181 B 9 B 12 225 A 11 A 11" )

!26,181 和 225 獲取 ID 列,並在此基礎上完成表格。 我們可以在 R 中做到嗎

希望下面的基本 R 選項適用於您的目的

type.convert(
  do.call(
    rbind,
    lapply(
      split.default(DF, cumsum(grepl("X\\d+", names(DF)))),
      function(x) data.frame(t(c(head(names(x), 1), t(x))))
    )
  ),
  as.is = TRUE
)

這使

    X1 X2 X3 X4 X5
1 X126  A  2  D  3
2 X181  B  9  B 12
3 X225  A 11  A 11

我從關閉標題開始,因為它更容易處理靜態/已知標題並將數據保留為數據。

DF <- read.table(header = FALSE, text =
"126    D1  181 N1  225 P1
A   2   B   9   A   11
D   3   B   12  A   11")

然后工作:

library(dplyr)
library(purrr) # map, transpose

split.default(DF, (seq_len(ncol(DF)) - 1) %/% 2) %>%
  map(., setNames, c("V1", "V2")) %>%
  lapply(., function(x) c(unlist(t(x)))) %>%
  bind_rows() %>%
  transpose()
#    V1 V2 V3 V4 V5 V6
# 1 126 D1  A  2  D  3
# 2 181 N1  B  9  B 12
# 3 225 P1  A 11  A 11

您可以根據需要命名它們(並省略列)。

暫無
暫無

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

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