R语言如何删除数据框列表中每个数据框的第一行
错误原因分析
第一个lapply方案错误
- lapply的第二个参数需要传入要对每个列表元素执行的函数,你直接写
dfs_list[-1,]是直接对整个dfs_list列表执行二维切片操作,而R中普通列表是一维结构,没有列维度,因此触发「维度数量不正确」报错。 - 你没有指定对列表内的单个tibble做切片,而是错误选择了对整个列表做切片。
第二个for循环方案错误
for(i in dfs_list)的迭代变量i拿到的是列表内的tibble对象本身,不是tibble对应的变量名字符串,而get()函数要求第一个输入必须是字符串格式的变量名,因此传入tibble对象会触发「第一个参数无效」报错。- 即便修正索引逻辑,
assign()函数只会在全局环境创建独立变量,不会直接修改原列表内的元素。
可行解决方案
基础R方案
直接给lapply传入匿名函数,对每个列表元素(单个tibble)执行切片操作:
dfs_edited <- lapply(dfs_list, function(x) x[-1, ])
tidyverse/purrr方案
如果你常用tidyverse生态,用purrr的map函数写法更简洁:
library(purrr) dfs_edited <- map(dfs_list, ~ slice(.x, -1))
补充提示
从你给出的tibble预览可以看到,第一行存储的实际是正确的列名,如果你需要同时完成「删除第一行+把第一行的值设为新列名」,可以直接用janitor包的row_to_names函数一步完成:
dfs_edited <- lapply(dfs_list, function(x) janitor::row_to_names(x, row_number = 1))
内容的提问来源于stack exchange,提问作者SourceCoda
相关产品推荐
相关产品推荐

