R语言 如何构建一个函数来从一个数组中的列名中提取数据

1aaf6o9v  于 2024-01-03  发布在  其他
关注(0)|答案(2)|浏览(106)

我试图从列表中包含的大量数据框的列名中提取数据。每个数据框的最后一列将包含我试图提取的唯一编号。
示例数据:

df1 <- data.frame(A = 1, B = 2, xx123xx = NA)

df2 <- data.frame(X = 1, Y = 2, xx456xx = NA)

dfList <- list(df1,df2)

字符串
然后,我想构建一个函数,为列表中的每个 Dataframe 执行以下操作:
提取列名中的数据

df1[,3] <- colnames(df1)[3]


删除数据的非数字部分

df1[,3] <- gsub("[^0-9]", "", df1[,3])


这样我就可以对列表中的所有 Dataframe 执行此操作,

lappy(dfList, function)


print(dfList)


返回所需的输出:

[[1]]
  A B xx123xx
1 1 2      123

[[2]]
  X Y xx456xx
1 1 2      456
svdrlsy4

svdrlsy41#

在这里我们可以编写helper函数

foo <- function(x) {
  id <- gsub("[^0-9]", "", tail(names(x), 1))
  x[, length(x)] <- id
  x
}

字符串
然后与lapply一起使用它来转换列表

dfList  <- lapply(dfList, foo)
# [[1]]
#   A B xx123xx
# 1 1 2     123
# 
# [[2]]
#   X Y xx456xx
# 1 1 2     456

4xy9mtcn

4xy9mtcn2#

我们可以将dplyrlast_col(选择最后一列)和cur_column(当前选定列的name)一起使用。parse_number从字符串中提取数字/数字:

library(purrr)
library(dplyr)

dfList |>
    map(\(x)
        mutate(x,
               across(last_col(),
                              \(x) parse_number(cur_column())
                      )
               )
        )

[[1]]
  A B xx123xx
1 1 2     123

[[2]]
  X Y xx456xx
1 1 2     456

字符串

相关问题