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

问题描述 投票:0回答:1

我有一个植物拉丁名称的数据框,还有另一个文件夹

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 文件的行号时失败了。

提前致谢!

r dataframe dplyr tidyverse mutate
1个回答
0
投票

我们可能需要

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()))
© www.soinside.com 2019 - 2024. All rights reserved.