【问题标题】:How to delete the first row from every data frame in a list of data frames?如何从数据框列表中的每个数据框中删除第一行?
【发布时间】:2021-11-30 12:08:50
【问题描述】:

R 新手!如果您回答,我将不胜感激任何解释我的错误!

我有一个数据框列表(实际上是小标题),我正在尝试删除所有数据框的第一行。这是其中一个数据框:

> head(dfs_list[[1]][[1]])
# A tibble: 6 × 5
  Day        `Day length` `Solar noon` `Astronomical t…  `Astronomical t… 
  <chr>      <chr>        <chr>        <chr>             <chr>
1 Day        Day length   Solar noon   Start             End
2 Jan 1      09:31:23     12:22:29 pm  6:02 am           6:42 pm
3 Jan 2      09:32:06     12:22:57 pm  6:02 am           6:43 pm
4 Jan 3      09:32:52     12:23:25 pm  6:02 am           6:44 pm
5 Jan 4      09:33:42     12:23:52 pm  6:02 am           6:44 pm
6 Jan 5      09:34:36     12:24:19 pm  6:03 am           6:45 pm

似乎任务应该很简单,但我很难做到。我尝试了两种方法,导致以下错误:

dfs_edited <- lapply(dfs_list, dfs_list[-1,])
Error in dfs_list[-1, ] : incorrect number of dimensions
for(i in dfs_list) {
  tmp <- get(i)
  tmp <- tmp[-1,]
  assign(i, tmp)
}
Error in get(i) : invalid first argument

【问题讨论】:

    标签: r dataframe loops lapply tibble


    【解决方案1】:

    看起来你有一个框架列表(双嵌套),也许这是在复制:

    set.seed(42)
    dfs_list <- replicate(2, replicate(3, mtcars[sample(32,3),], simplify=FALSE), simplify=FALSE)
    
    str(dfs_list, max.level=2)
    # List of 2
    #  $ :List of 3
    #   ..$ :'data.frame':  3 obs. of  11 variables:
    #   ..$ :'data.frame':  3 obs. of  11 variables:
    #   ..$ :'data.frame':  3 obs. of  11 variables:
    #  $ :List of 3
    #   ..$ :'data.frame':  3 obs. of  11 variables:
    #   ..$ :'data.frame':  3 obs. of  11 variables:
    #   ..$ :'data.frame':  3 obs. of  11 variables:
    
    dfs_list[[1]][1:2]
    # [[1]]
    #                    mpg cyl disp  hp drat    wt  qsec vs am gear carb
    # Chrysler Imperial 14.7   8  440 230 3.23 5.345 17.42  0  0    3    4
    # Hornet Sportabout 18.7   8  360 175 3.15 3.440 17.02  0  0    3    2
    # Mazda RX4         21.0   6  160 110 3.90 2.620 16.46  0  1    4    4
    # [[2]]
    #                   mpg cyl  disp  hp drat    wt  qsec vs am gear carb
    # Pontiac Firebird 19.2   8 400.0 175 3.08 3.845 17.05  0  0    3    2
    # Merc 280         19.2   6 167.6 123 3.92 3.440 18.30  1  0    4    4
    # Hornet 4 Drive   21.4   6 258.0 110 3.08 3.215 19.44  1  0    3    1
    

    从这里开始,双lapply 将起作用:

    dfs_list2 <- lapply(dfs_list, function(z) lapply(z, function(y) y[-1,]))
    
    str(dfs_list2, max.level=2)
    # List of 2
    #  $ :List of 3
    #   ..$ :'data.frame':  2 obs. of  11 variables:
    #   ..$ :'data.frame':  2 obs. of  11 variables:
    #   ..$ :'data.frame':  2 obs. of  11 variables:
    #  $ :List of 3
    #   ..$ :'data.frame':  2 obs. of  11 variables:
    #   ..$ :'data.frame':  2 obs. of  11 variables:
    #   ..$ :'data.frame':  2 obs. of  11 variables:
    
    dfs_list2[[1]][1:2]
    # [[1]]
    #                    mpg cyl disp  hp drat   wt  qsec vs am gear carb
    # Hornet Sportabout 18.7   8  360 175 3.15 3.44 17.02  0  0    3    2
    # Mazda RX4         21.0   6  160 110 3.90 2.62 16.46  0  1    4    4
    # [[2]]
    #                 mpg cyl  disp  hp drat    wt  qsec vs am gear carb
    # Merc 280       19.2   6 167.6 123 3.92 3.440 18.30  1  0    4    4
    # Hornet 4 Drive 21.4   6 258.0 110 3.08 3.215 19.44  1  0    3    1
    

    【讨论】:

    • 谢谢先生!我的列表确实是双重嵌套的。 (我正确使用了吗?)
    猜你喜欢
    • 2014-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-23
    • 1970-01-01
    • 1970-01-01
    • 2020-12-22
    • 2021-02-03
    相关资源
    最近更新 更多