通过使用dplyr计算另一个csv的行数,在data.frame中添加一行,该csv的名称存储在data.frame中

1mrurvl1  于 2023-04-09  发布在  其他
关注(0)|答案(1)|浏览(173)

我有一个植物拉丁名称的数据框,另一个文件夹GBIF_data存储下载的gbif数据,以csv格式命名,由数据框中的拉丁名称命名,我想mutate一个新列来存储每个植物拉丁名称从GBIF下载的数据量,以下是代码:

read.csv("data.csv") %>%
  mutate(OCCURRENCES = nrow(read.delim(CSVPATH))) #csv files downloaded from GBIF use tab as delimiter so here read.delim should be used

数据框看起来像这样(这里我只显示CSVPATH列,它是通过连接植物拉丁名之前的路径并将拉丁名中的空格替换为下划线而发生变化的,其他与主题无关的列已被省略):

CSVPATH                                                                            
 ../GBIF_data/Lycopodium_cernuum.csv          
 ../GBIF_data/Lycopodium_japonicum.csv        
 ../GBIF_data/Lycopodiastrum_casuarinoides.csv
 ../GBIF_data/Selaginella_uncinata.csv        
 ../GBIF_data/Selaginella_doederleinii.csv    
 ../GBIF_data/Equisetum_ramosissimum.csv      
 ../GBIF_data/Ophioglossum_reticulatum.csv    
 ../GBIF_data/Osmunda_vachellii.csv           
 ../GBIF_data/Lygodium_japonicum.csv          
 ../GBIF_data/Lygodium_microphyllum.csv

并且存储在GBIF_data文件夹中的csv数据的名称只是用下划线_替换了拉丁名称中的空格。当我运行代码时,它报告了错误:

Error in `mutate()`:
! Problem while computing `OCCURRENCES = nrow(read.delim(CSVPATH))`.
Caused by error in `h()`:
! error in evaluating the argument 'x' in selecting a method for function 'nrow': invalid 'description' argument

我想知道为什么dplyr::mutate在这种情况下不起作用?它通过字符串操作成功地将拉丁名称变异为CSVPATH,但在阅读和计算另一个csv文件的行号时失败了。
先谢谢你了!

yeotifhr

yeotifhr1#

我们可能需要rowwise,因为read.delim没有矢量化,即它一次只读取一个文件

library(dplyr)
read.csv("data.csv") %>%
  rowwise %>%
  mutate(OCCURRENCES = nrow(read.delim(CSVPATH))) %>%
  ungroup

或者另一个选项是map

library(purrr)
read.csv('data.csv') %>%
   mutate(OCCURRENCES = map_int(CSVPATH, ~ read.delim(.x) %>% nrow()))

相关问题