获取每列的长度、位置和数据框中的类型

问题描述 投票:0回答:1

我有包含主题编号、序列、周期、治疗和浓度的数据框。 我想要每列的长度和每个列和字符或数字详细信息的位置。 我尝试了很多功能,但只有长度。

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 
r
1个回答
0
投票

试试这个:

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。)

© www.soinside.com 2019 - 2024. All rights reserved.