我有包含主题编号、序列、周期、治疗和浓度的数据框。 我想要每列的长度和每个列和字符或数字详细信息的位置。 我尝试了很多功能,但只有长度。
R 数据框中的示例数据
SubjectNumber Sequence Period Treatment Conc1 Conc2
1 AB 1 A 1.034 2.023
2 BA 2 B 1.234 2.043
3 BA 2 B 2.334 2.323
例如下表。我想要每个列的详细信息,如下表所示。
DESCRIPTOR Position LENGTH TYPE
subject number 1-2 2 alphanumeric
Sequence 4-5 2 alphanumeric
Period 7-7 1 alphanumeric
treatment 9-9 1 alphanumeric
concentration 1 11-16 6 numeric
concentration 2 18-23 6 numeric
试试这个:
quux <- structure(list(SubjectNumber = c("11", "2", "3"), Sequence = c("AB", "BA", "BA"), Period = c("1", "2", "2"), Treatment = c("A", "B", "B"), Conc1 = c(1.034, 1.234, 2.334), Conc2 = c(2.023, 2.043, 2.323)), row.names = c(NA, -3L), class = "data.frame")
Map(function(nm, col) {
mod <- mode(col)
data.frame(
DESCRIPTOR = nm,
LENGTH = if (mod == "numeric") 6L else max(nchar(col)),
TYPE = mod)
}, names(quux), quux, USE.NAMES = FALSE) |>
do.call(rbind, args = _) |>
transform(Position = cumsum(LENGTH + c(0, rep(1, ncol(quux)-1)))) |>
transform(Position = paste(Position - LENGTH + 1L, Position, sep = "-"))
# DESCRIPTOR LENGTH TYPE Position
# 1 SubjectNumber 2 character 1-2
# 2 Sequence 2 character 4-5
# 3 Period 1 character 7-7
# 4 Treatment 1 character 9-9
# 5 Conc1 6 numeric 11-16
# 6 Conc2 6 numeric 18-23
(对于带有
_
的 |>
参数,需要 R >= 4.2。)