r - 将数据框列表的名称的数字部分添加为列

标签 r list dataframe datatable

我有一个数据列表。在此列表中,它是数据表或数据框。遇到这个问题后,我会绑定(bind)列表。

数据示例:

players
$`0001playeraway`
      key NO        MIN 2PTM 2PTA 2PT(%) 3PTM 3PTA 3PT(%) FGM FGA FG(%) FTM FTA FT(%) OR DR REB AST TO STL BS PF
   1:   * 17   40:00:00    9   15     60    0    0      0   9  15    60   2   4    50  1  8   9   2  4   1  2  1
   2:   * 16   40:00:00    4    8     50    8   13     62  12  21    57  20  22    91  2  3   5   4  4   0  0  3
   3:   * 10   33:02:00    2    4     50    0    3      0   2   7    29   0   0     0  0  4   4   1  3   1  0  4
   4:   *  3   27:46:00    2    3     67    0    0      0   2   3    67   6   6   100  1  4   5   0  1   4  0  3
   5:      1   26:24:00    1    1    100    0    2      0   1   3    33   1   2    50  1  0   1   1  0   1  0  4

$`0102playeraway`
      key NO        MIN 2PTM 2PTA 2PT(%) 3PTM 3PTA 3PT(%) FGM FGA FG(%) FTM FTA FT(%) OR DR REB AST TO STL BS PF
   1:   *  9   40:00:00    1    3     33    2    7     29   3  10    30   3   4    75  1  4   5   8  1   4  1  3
   2:   * 53   38:18:00    6   14     43    0    0      0   6  14    43   6   8    75  5  3   8   3  4   0  2  5
   3:   * 13   35:16:00    3    8     38    1    2     50   4  10    40   2   5    40  1  3   4   5  0   0  0  5
   4:   * 23   31:42:00    2    7     29    2    8     25   4  15    27   7   7   100  1  7   8   1  1   0  0  2
   5:     14      22:08    2    3     67    2    4     50   4   7    57   0   0     0  0  2   2   2  1   0  0  1

其余省略。

如何为列表中的数据表名称赋值?

所需输出:

players
$`0001playeraway`
      year key NO        MIN 2PTM 2PTA 2PT(%) 3PTM 3PTA 3PT(%) FGM FGA FG(%) FTM FTA FT(%) OR DR REB AST TO STL BS PF
   1: 0001  * 17   40:00:00    9   15     60    0    0      0   9  15    60   2   4    50  1  8   9   2  4   1  2  1
   2: 0001  * 16   40:00:00    4    8     50    8   13     62  12  21    57  20  22    91  2  3   5   4  4   0  0  3
   3: 0001  * 10   33:02:00    2    4     50    0    3      0   2   7    29   0   0     0  0  4   4   1  3   1  0  4
   4: 0001  *  3   27:46:00    2    3     67    0    0      0   2   3    67   6   6   100  1  4   5   0  1   4  0  3
   5: 0001     1   26:24:00    1    1    100    0    2      0   1   3    33   1   2    50  1  0   1   1  0   1  0  4

$`0102playeraway`
      year key NO        MIN 2PTM 2PTA 2PT(%) 3PTM 3PTA 3PT(%) FGM FGA FG(%) FTM FTA FT(%) OR DR REB AST TO STL BS PF
   1: 0102  *  9   40:00:00    1    3     33    2    7     29   3  10    30   3   4    75  1  4   5   8  1   4  1  3
   2: 0102  * 53   38:18:00    6   14     43    0    0      0   6  14    43   6   8    75  5  3   8   3  4   0  2  5
   3: 0102  * 13   35:16:00    3    8     38    1    2     50   4  10    40   2   5    40  1  3   4   5  0   0  0  5
   4: 0102  * 23   31:42:00    2    7     29    2    8     25   4  15    27   7   7   100  1  7   8   1  1   0  0  2
   5: 0102    14      22:08    2    3     67    2    4     50   4   7    57   0   0     0  0  2   2   2  1   0  0  1

最佳答案

您可以使用 purrr::imap 和 dplyr::mutate 向列表中的所有数据帧添加一列,其中包含每个元素的名称。在这里,我还使用 sringr::str_extract 来根据需要获取名称的数字部分。

#some data to work with as an example:
df1 <- data.frame(x = 1:3, y=letters[1:3])
listdfs <- list("tr088text" = df1,"character963" = df1,"00123string" = df1)

library(tidyverse)

imap(listdfs, ~mutate(year = str_extract(.y, "\\-*\\d+\\.*\\d*") , .x))

#> $tr088text
#>   x y year
#> 1 1 a  088
#> 2 2 b  088
#> 3 3 c  088
#> 
#> $character963
#>   x y year
#> 1 1 a  963
#> 2 2 b  963
#> 3 3 c  963
#> 
#> $`00123string`
#>   x y  year
#> 1 1 a 00123
#> 2 2 b 00123
#> 3 3 c 00123

reprex package于2019年6月15日创建(v0.3.0)

关于r - 将数据框列表的名称的数字部分添加为列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56608540/

相关文章:

r - 如何从R中的字符串中检索某些字符?

c# - List<List> 困惑

c# - 如何使用 Linq 在列表中查找两个连续项目的子列表

java - 按对象属性计算两个列表的交集

python - DataFrame.drop 适用于列表但不适用于元组

python - Pandas 为每个字符拆分数据框列

r - 将数据帧转换为特定格式的频率表

r - R 中两个极坐标图重叠和堆叠的集成版本

r - 在 R 中按列在两个数据帧之间应用函数(ks.test)

python - 如何使用 pandas 使用列与列列表和值列表之间的匹配来填充数据框?