首页 > 解决方案 > R从列表中的元素名称中提取数字并将提取的数字作为新列插入每个元素

问题描述

我有几个数据帧的列表,每个数据帧都有 puri9_raw、puri10_raw 等名称。

我喜欢提取名称中的数字,例如。9, 10, 11... 并将这些数字作为新列插入每个相应的数据帧中。

我编写了一个函数来执行此操作,并正在考虑使用 lapply() 来执行此操作,但我遇到了错误。当我直接在 Dataframe 上应用此函数时,它可以工作:

addcategory <- function(df) {
  df$category <- str_extract(as.character(substitute(df)), "\\d+")
  return(df)
}

newdf <- addcategory(pur9)

在 lapply() 中执行此功能:

a <- lapply(filtered_files, addcategory)

它返回以下错误:

 Error in `$<-.data.frame`(`*tmp*`, "category", value = c(NA_character_,  : 
  replacement has 3 rows, data has 32 

感谢你的帮助!

过滤文件的数据

structure(list(purifier10corr_cleaned = structure(list(x = c("Inlet Gas Pressure", 
"Inlet Gas Pressure", "Inlet Gas Pressure", "Inlet Gas Pressure", 
"Outlet Gas Pressure", "Total Purified Time (Lower)", "Total Purified Time (Lower)", 
"Total Purified Time (Lower)", "Total Purified Time (Lower)", 
"Total Purified Time (Lower)", "Total Purified Time (Lower)", 
"Total Purified Time (Lower)", "Vessel A Flow Rate", "Vessel A Flow Rate", 
"Vessel A Flow Rate", "Vessel A Flow Rate", "Vessel A Flow Rate", 
"Vessel A Flow Rate", "TC1A PH Wall", "TC1A PH Wall", "TC1A PH Wall", 
"TC1A PH Wall", "TC2A Vessel Bed", "TC2A Vessel Bed", "TC2A Vessel Bed", 
"TC2A Vessel Bed", "TC3A Vessel Wall", "TC3A Vessel Wall", "TC3A Vessel Wall", 
"GS1A Gettsafe", "GS1A Gettsafe", "Vessel A Preheater Output"
), y = c("Outlet Gas Pressure", "Total Purified Time (Lower)", 
"Vessel A Flow Total (Lower)", "Delta P Pressure", "Vessel A Flow Total (Lower)", 
"Vessel A Flow Rate", "TC1A PH Wall", "TC2A Vessel Bed", "TC3A Vessel Wall", 
"GS1A Gettsafe", "Vessel A Preheater Output", "Delta P Pressure", 
"TC1A PH Wall", "TC2A Vessel Bed", "TC3A Vessel Wall", "GS1A Gettsafe", 
"Vessel A Preheater Output", "Delta P Pressure", "TC2A Vessel Bed", 
"GS1A Gettsafe", "Vessel A Preheater Output", "Delta P Pressure", 
"TC3A Vessel Wall", "GS1A Gettsafe", "Vessel A Preheater Output", 
"Delta P Pressure", "GS1A Gettsafe", "Vessel A Preheater Output", 
"Delta P Pressure", "Vessel A Preheater Output", "Delta P Pressure", 
"Delta P Pressure"), cdf = c(0.942582844653833, 0.851312566463532, 
0.74618899263432, 0.73339384226807, 0.700802927079407, 0.92942206712539, 
0.852259766192025, -0.842065919341967, -0.803131063975672, -0.790831106388823, 
0.919210668235385, 0.936387965341553, 0.892034573246212, -0.952737592363305, 
-0.871547177967677, -0.931920970063449, 0.987797574517254, 0.960376852857353, 
-0.736326946302192, -0.720754247510457, 0.865945105089496, 0.873417284945245, 
0.960368610704985, 0.991031231534187, -0.956051607303599, -0.894230230210303, 
0.946168658653559, -0.875438872772781, -0.829627717387136, -0.931190098160053, 
-0.861839580799302, 0.949959380849764), abscorr = c(0.942582844653833, 
0.851312566463532, 0.74618899263432, 0.73339384226807, 0.700802927079407, 
0.92942206712539, 0.852259766192025, 0.842065919341967, 0.803131063975672, 
0.790831106388823, 0.919210668235385, 0.936387965341553, 0.892034573246212, 
0.952737592363305, 0.871547177967677, 0.931920970063449, 0.987797574517254, 
0.960376852857353, 0.736326946302192, 0.720754247510457, 0.865945105089496, 
0.873417284945245, 0.960368610704985, 0.991031231534187, 0.956051607303599, 
0.894230230210303, 0.946168658653559, 0.875438872772781, 0.829627717387136, 
0.931190098160053, 0.861839580799302, 0.949959380849764)), .Names = c("x", 
"y", "cdf", "abscorr"), row.names = c(1L, 2L, 4L, 11L, 16L, 26L, 
28L, 29L, 30L, 32L, 33L, 34L, 38L, 39L, 40L, 42L, 43L, 44L, 56L, 
59L, 60L, 61L, 64L, 66L, 67L, 68L, 72L, 73L, 74L, 82L, 83L, 86L
), class = "data.frame"), purifier11corr_cleaned = structure(list(
    x = c("Inlet Gas Pressure", "Inlet Gas Pressure", "Inlet Gas Pressure", 
    "Inlet Gas Pressure", "Inlet Gas Pressure", "Inlet Gas Pressure", 
    "Inlet Gas Pressure", "Outlet Gas Pressure", "Total Purified Time (Lower)", 
    "Total Purified Time (Lower)", "Total Purified Time (Lower)", 
    "Total Purified Time (Lower)", "Total Purified Time (Lower)", 
    "Total Purified Time (Lower)", "Vessel A Flow Rate", "Vessel A Flow Rate", 
    "Vessel A Flow Rate", "Vessel A Flow Rate", "TC1A PH Wall", 
    "TC1A PH Wall", "TC1A PH Wall", "TC3A Vessel Wall", "TC3A Vessel Wall", 
    "Vessel A Preheater Output"), y = c("Outlet Gas Pressure", 
    "Total Purified Time (Lower)", "Vessel A Flow Rate", "Vessel A Flow Total (Lower)", 
    "TC2A Vessel Bed", "Vessel A Preheater Output", "Delta P Pressure", 
    "Vessel A Flow Total (Lower)", "Vessel A Flow Rate", "TC1A PH Wall", 
    "TC2A Vessel Bed", "TC3A Vessel Wall", "Vessel A Preheater Output", 
    "Delta P Pressure", "TC1A PH Wall", "TC3A Vessel Wall", "Vessel A Preheater Output", 
    "Delta P Pressure", "TC3A Vessel Wall", "Vessel A Preheater Output", 
    "Delta P Pressure", "Vessel A Preheater Output", "Delta P Pressure", 
    "Delta P Pressure"), cdf = c(0.895030043596337, 0.867471044291586, 
    0.726872575365218, 0.760362626995556, 0.743348278242154, 
    0.712935126800633, 0.704984735450192, 0.738844433701125, 
    0.929132059555132, 0.905268959512924, 0.77556658970724, 0.875487957528081, 
    0.912746096128495, 0.913144763303326, 0.993278221439425, 
    0.980285529550282, 0.990499518758699, 0.973842952423053, 
    0.988818078882709, 0.987155661086668, 0.972628468744456, 
    0.986111031922197, 0.94878802373624, 0.960097382317158), 
    abscorr = c(0.895030043596337, 0.867471044291586, 0.726872575365218, 
    0.760362626995556, 0.743348278242154, 0.712935126800633, 
    0.704984735450192, 0.738844433701125, 0.929132059555132, 
    0.905268959512924, 0.77556658970724, 0.875487957528081, 0.912746096128495, 
    0.913144763303326, 0.993278221439425, 0.980285529550282, 
    0.990499518758699, 0.973842952423053, 0.988818078882709, 
    0.987155661086668, 0.972628468744456, 0.986111031922197, 
    0.94878802373624, 0.960097382317158)), .Names = c("x", "y", 
"cdf", "abscorr"), row.names = c(1L, 2L, 3L, 4L, 6L, 10L, 11L, 
16L, 26L, 28L, 29L, 30L, 33L, 34L, 38L, 40L, 43L, 44L, 57L, 60L, 
61L, 73L, 74L, 86L), class = "data.frame"), purifier12corr_cleaned = structure(list(
    x = c("Inlet Gas Pressure", "Inlet Gas Pressure", "Inlet Gas Pressure", 
    "Inlet Gas Pressure", "Inlet Gas Pressure", "Inlet Gas Pressure", 
    "Inlet Gas Pressure", "Outlet Gas Pressure", "Total Purified Time (Lower)", 
    "Total Purified Time (Lower)", "Total Purified Time (Lower)", 
    "Total Purified Time (Lower)", "Total Purified Time (Lower)", 
    "Total Purified Time (Lower)", "Vessel A Flow Rate", "Vessel A Flow Rate", 
    "Vessel A Flow Rate", "Vessel A Flow Rate", "Vessel A Flow Rate", 
    "Vessel A Flow Rate", "Vessel A Flow Rate", "TC1A PH Wall", 
    "TC1A PH Wall", "TC1A PH Wall", "TC1A PH Wall", "TC1A PH Wall", 
    "TC1A PH Wall", "TC2A Vessel Bed", "TC2A Vessel Bed", "TC2A Vessel Bed", 
    "TC2A Vessel Bed", "TC3A Vessel Wall", "TC3A Vessel Wall", 
    "TC3A Vessel Wall", "TC3A Vessel Wall", "TC4A Outlet Gas", 
    "TC4A Outlet Gas", "Vessel A Preheater Output", "Vessel A Preheater Output", 
    "Vessel A Blanket Output"), y = c("Outlet Gas Pressure", 
    "Total Purified Time (Lower)", "Vessel A Flow Rate", "Vessel A Flow Total (Lower)", 
    "Vessel A Preheater Output", "Vessel A Blanket Output", "Delta P Pressure", 
    "Vessel A Flow Total (Lower)", "Vessel A Flow Rate", "TC1A PH Wall", 
    "TC3A Vessel Wall", "Vessel A Preheater Output", "Vessel A Blanket Output", 
    "Delta P Pressure", "TC1A PH Wall", "TC2A Vessel Bed", "TC3A Vessel Wall", 
    "TC4A Outlet Gas", "Vessel A Preheater Output", "Vessel A Blanket Output", 
    "Delta P Pressure", "TC2A Vessel Bed", "TC3A Vessel Wall", 
    "TC4A Outlet Gas", "Vessel A Preheater Output", "Vessel A Blanket Output", 
    "Delta P Pressure", "TC3A Vessel Wall", "GS1A Gettsafe", 
    "Vessel A Preheater Output", "Delta P Pressure", "TC4A Outlet Gas", 
    "Vessel A Preheater Output", "Vessel A Blanket Output", "Delta P Pressure", 
    "Vessel A Preheater Output", "Delta P Pressure", "Vessel A Blanket Output", 
    "Delta P Pressure", "Delta P Pressure"), cdf = c(0.926850587663412, 
    0.866691836294412, 0.769005792434557, 0.734786596246863, 
    0.765617383853654, 0.737339049196957, 0.772607862034451, 
    0.702819738672892, 0.954381581275433, 0.927932921277022, 
    0.927625508556892, 0.954311120176031, 0.832869757257207, 
    0.941592261478602, 0.98686719856886, -0.777935212612154, 
    0.985980225682492, 0.747897353936776, 0.990115955814871, 
    0.831400479370571, 0.969063553912319, -0.768460373541157, 
    0.999345357812714, 0.795470208694951, 0.979958754192373, 
    0.786061475983542, 0.957361626888298, -0.765969157221048, 
    0.853635545501843, -0.783155248265995, -0.717281138076634, 
    0.795066039607157, 0.978992788697791, 0.780304181320046, 
    0.956497329457768, 0.73007053107914, 0.724580339277283, 0.843696945250939, 
    0.962553775738599, 0.80743766860876), abscorr = c(0.926850587663412, 
    0.866691836294412, 0.769005792434557, 0.734786596246863, 
    0.765617383853654, 0.737339049196957, 0.772607862034451, 
    0.702819738672892, 0.954381581275433, 0.927932921277022, 
    0.927625508556892, 0.954311120176031, 0.832869757257207, 
    0.941592261478602, 0.98686719856886, 0.777935212612154, 0.985980225682492, 
    0.747897353936776, 0.990115955814871, 0.831400479370571, 
    0.969063553912319, 0.768460373541157, 0.999345357812714, 
    0.795470208694951, 0.979958754192373, 0.786061475983542, 
    0.957361626888298, 0.765969157221048, 0.853635545501843, 
    0.783155248265995, 0.717281138076634, 0.795066039607157, 
    0.978992788697791, 0.780304181320046, 0.956497329457768, 
    0.73007053107914, 0.724580339277283, 0.843696945250939, 0.962553775738599, 
    0.80743766860876)), .Names = c("x", "y", "cdf", "abscorr"
), row.names = c(1L, 2L, 3L, 4L, 10L, 11L, 12L, 17L, 28L, 30L, 
32L, 35L, 36L, 37L, 41L, 42L, 43L, 44L, 46L, 47L, 48L, 61L, 62L, 
63L, 65L, 66L, 67L, 70L, 72L, 73L, 75L, 78L, 80L, 81L, 82L, 86L, 
88L, 96L, 97L, 100L), class = "data.frame"), purifier14corr_cleaned = structure(list(
    x = c("Inlet Gas Pressure", "Total Purified Time (Lower)", 
    "Total Purified Time (Lower)", "Total Purified Time (Lower)", 
    "Total Purified Time (Lower)", "Total Purified Time (Lower)", 
    "Total Purified Time (Lower)", "Total Purified Time (Lower)", 
    "Total Purified Time (Lower)", "Vessel A Flow Rate", "Vessel A Flow Rate", 
    "Vessel A Flow Rate", "Vessel A Flow Rate", "Vessel A Flow Rate", 
    "Vessel A Flow Total (Lower)", "Vessel A Flow Total (Lower)", 
    "Vessel A Flow Total (Lower)", "Vessel A Flow Total (Lower)", 
    "Vessel A Flow Total (Lower)", "Vessel A Flow Total (Lower)", 
    "TC1A PH Wall", "TC1A PH Wall", "TC1A PH Wall", "TC2A Vessel Bed", 
    "TC2A Vessel Bed", "TC2A Vessel Bed", "GS1A Gettsafe", "GS1A Gettsafe", 
    "Vessel A Preheater Output"), y = c("Outlet Gas Pressure", 
    "Vessel A Flow Rate", "Vessel A Flow Total (Lower)", "TC1A PH Wall", 
    "TC2A Vessel Bed", "TC3A Vessel Wall", "GS1A Gettsafe", "Vessel A Preheater Output", 
    "Vessel A Blanket Output", "Vessel A Flow Total (Lower)", 
    "TC2A Vessel Bed", "GS1A Gettsafe", "Vessel A Preheater Output", 
    "Vessel A Blanket Output", "TC1A PH Wall", "TC2A Vessel Bed", 
    "TC3A Vessel Wall", "GS1A Gettsafe", "Vessel A Preheater Output", 
    "Vessel A Blanket Output", "TC3A Vessel Wall", "Vessel A Preheater Output", 
    "Vessel A Blanket Output", "GS1A Gettsafe", "Vessel A Preheater Output", 
    "Vessel A Blanket Output", "Vessel A Preheater Output", "Vessel A Blanket Output", 
    "Vessel A Blanket Output"), cdf = c(0.928682218151924, -0.716165706235164, 
    0.996983042088941, 0.942533565718294, -0.82106928127015, 
    0.868507408828244, -0.721102791716829, -0.883320615741987, 
    0.90771354030701, -0.740946425296549, 0.803456554526274, 
    0.777725649353059, 0.818157508787532, -0.817160358197827, 
    0.91972091493354, -0.858904626399683, 0.847609637376188, 
    -0.76840092768087, -0.909805769757979, 0.93435361657217, 
    0.927543426719748, -0.72114256731816, 0.747217151788518, 
    0.973149191226473, 0.956891100840945, -0.974582912452621, 
    0.912622326854633, -0.929743555493146, -0.976861022325206
    ), abscorr = c(0.928682218151924, 0.716165706235164, 0.996983042088941, 
    0.942533565718294, 0.82106928127015, 0.868507408828244, 0.721102791716829, 
    0.883320615741987, 0.90771354030701, 0.740946425296549, 0.803456554526274, 
    0.777725649353059, 0.818157508787532, 0.817160358197827, 
    0.91972091493354, 0.858904626399683, 0.847609637376188, 0.76840092768087, 
    0.909805769757979, 0.93435361657217, 0.927543426719748, 0.72114256731816, 
    0.747217151788518, 0.973149191226473, 0.956891100840945, 
    0.974582912452621, 0.912622326854633, 0.929743555493146, 
    0.976861022325206)), .Names = c("x", "y", "cdf", "abscorr"
), row.names = c(1L, 28L, 29L, 30L, 31L, 32L, 34L, 35L, 36L, 
40L, 42L, 45L, 46L, 47L, 51L, 52L, 53L, 55L, 56L, 57L, 62L, 65L, 
66L, 72L, 73L, 74L, 91L, 92L, 96L), class = "data.frame"), purifier15corr_cleaned = structure(list(
    x = c("Inlet Gas Pressure", "Total Purified Time (Lower)"
    ), y = c("Outlet Gas Pressure", "Vessel A Flow Total (Lower)"
    ), cdf = c(0.81775813622335, 0.999669773826533), abscorr = c(0.81775813622335, 
    0.999669773826533)), .Names = c("x", "y", "cdf", "abscorr"
), row.names = c(1L, 29L), class = "data.frame"), purifier9corr_cleaned = structure(list(
    x = c("Inlet Gas Pressure", "Inlet Gas Pressure", "Inlet Gas Pressure", 
    "Inlet Gas Pressure", "Inlet Gas Pressure", "Inlet Gas Pressure", 
    "Inlet Gas Pressure", "Inlet Gas Pressure", "Outlet Gas Pressure", 
    "Total Purified Time (Lower)", "Total Purified Time (Lower)", 
    "Total Purified Time (Lower)", "Total Purified Time (Lower)", 
    "Total Purified Time (Lower)", "Vessel A Flow Rate", "Vessel A Flow Rate", 
    "Vessel A Flow Rate", "Vessel A Flow Rate", "Vessel A Flow Rate", 
    "TC1A PH Wall", "TC1A PH Wall", "TC1A PH Wall", "TC1A PH Wall", 
    "TC2A Vessel Bed", "TC3A Vessel Wall", "TC3A Vessel Wall", 
    "TC3A Vessel Wall", "TC4A Outlet Gas", "TC4A Outlet Gas", 
    "Vessel A Preheater Output"), y = c("Outlet Gas Pressure", 
    "Total Purified Time (Lower)", "Vessel A Flow Rate", "Vessel A Flow Total (Lower)", 
    "TC1A PH Wall", "TC3A Vessel Wall", "Vessel A Preheater Output", 
    "Delta P Pressure", "Vessel A Flow Total (Lower)", "Vessel A Flow Rate", 
    "TC1A PH Wall", "TC3A Vessel Wall", "Vessel A Preheater Output", 
    "Delta P Pressure", "TC1A PH Wall", "TC3A Vessel Wall", "TC4A Outlet Gas", 
    "Vessel A Preheater Output", "Delta P Pressure", "TC3A Vessel Wall", 
    "TC4A Outlet Gas", "Vessel A Preheater Output", "Delta P Pressure", 
    "GS1A Gettsafe", "TC4A Outlet Gas", "Vessel A Preheater Output", 
    "Delta P Pressure", "Vessel A Preheater Output", "Delta P Pressure", 
    "Delta P Pressure"), cdf = c(0.944604888321056, 0.874809845503791, 
    0.762637074418356, 0.732835271617901, 0.711272965227059, 
    0.709910624822269, 0.735953626590443, 0.767828174551441, 
    0.71020200631915, 0.943973621052222, 0.926500529073283, 0.925352060360054, 
    0.925566182218301, 0.935238128128665, 0.989077927174152, 
    0.985729070305404, 0.729464824402568, 0.986236284898409, 
    0.968901353422607, 0.996662300785658, 0.780312177585249, 
    0.9784098562977, 0.962592819382886, 0.811616937725951, 0.780733881483196, 
    0.977377106827236, 0.956604872098185, 0.725293982642169, 
    0.702186452815522, 0.953496206415149), abscorr = c(0.944604888321056, 
    0.874809845503791, 0.762637074418356, 0.732835271617901, 
    0.711272965227059, 0.709910624822269, 0.735953626590443, 
    0.767828174551441, 0.71020200631915, 0.943973621052222, 0.926500529073283, 
    0.925352060360054, 0.925566182218301, 0.935238128128665, 
    0.989077927174152, 0.985729070305404, 0.729464824402568, 
    0.986236284898409, 0.968901353422607, 0.996662300785658, 
    0.780312177585249, 0.9784098562977, 0.962592819382886, 0.811616937725951, 
    0.780733881483196, 0.977377106827236, 0.956604872098185, 
    0.725293982642169, 0.702186452815522, 0.953496206415149)), .Names = c("x", 
"y", "cdf", "abscorr"), row.names = c(1L, 2L, 3L, 4L, 5L, 7L, 
10L, 11L, 16L, 26L, 28L, 30L, 33L, 34L, 38L, 40L, 41L, 43L, 44L, 
57L, 58L, 60L, 61L, 66L, 71L, 73L, 74L, 78L, 79L, 86L), class = "data.frame")), .Names = c("purifier10corr_cleaned", 
"purifier11corr_cleaned", "purifier12corr_cleaned", "purifier14corr_cleaned", 
"purifier15corr_cleaned", "purifier9corr_cleaned"))

标签: r

解决方案


您可以在列表的元素上运行一个循环,如下所示:

for (i in seq_along(filtered_files)) {
  filtered_files[[i]]$category <- stringr::str_extract(names(filtered_files)[i], "\\d+")
}

推荐阅读