繁体   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