我有一个植物拉丁名称的数据框,还有另一个文件夹
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 文件的行号时失败了。
提前致谢!
我们可能需要
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()))