[英]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.