簡體   English   中英

R,循環通過 dataframe,創建一個具有附加內容的新

[英]R , Looping through a dataframe , creating a new one with additional content

小心,對 R 來說很新——但我真的很想在 R 而不是 java 中執行此操作。

我的 csv 文件(2020 年物種的瑞典紅名單)如下所示:

id,svenskt,latin,Organismgrupp,Kategori,Observationer,Landskapstyp,status_abbrev,Rodlistekriterium
249012,,Abia candens,stekel,Art,3,"Jordbrukslandskap (J) - Stor betydelse, Skog (S) - Har betydelse",DD,
249014,,Abia lonicerae,stekel,Art,2,Skog (S) - Stor betydelse,DD,
261452,,Abia nitens,stekel,Art,0,Jordbrukslandskap (J) - Stor betydelse,DD,
  • 通過按下按鈕“skapa csv-fil”,可以從SLU下載整個 csv 文件。

對我來說有趣的列只有“id”和“status_abbrev”列。 我想使用這些列來更新我的數據庫表,做這樣的事情:

sql<- paste("update redlist SET status_abbrev='",abbrev,"' ","where id=",id,sep="")

使用以下命令讀取 csv 文件:

library(dplyr)
redlist <- read.csv("rodlistade_arter_tampered_2.csv",header=TRUE);
dat <- select(redlist,'id', 'status_abbrev')

前 3 行中的 output 將是:

  1. redlist是 dataframe,包含 csv 和 header。
  2. dat是 dataframe,包含 redlist 的子集(id 和 status_abbrev)。

但是哪個庫最適合遍歷“dat”數據框以創建類似的東西? 迭代並挑選 abbrev 和 id 並為每一行創建以下字符串- (最后我想將這些字符串寫入 sql-batch 文件並更新粗糙的 5660 記錄)

sql<- paste("update redlist SET status_abbrev='",abbrev,"' ","where id=",id,sep="")

這樣我的結果字符串就會是這樣的(然后遍歷整個文件):

update redlist SET status_abbrev=DD where id=249012

redlist 和 dat 的屏幕截圖-

最好的,我

使用dplyr::mutate()glue::glue()你可以創建這樣的字符串

library(tidyverse)
library(glue)
#> 
#> Attaching package: 'glue'
#> The following object is masked from 'package:dplyr':
#> 
#>     collapse

str <- 'id,svenskt,latin,Organismgrupp,Kategori,Observationer,Landskapstyp,status_abbrev,Rodlistekriterium
249012,,Abia candens,stekel,Art,3,"Jordbrukslandskap (J) - Stor betydelse, Skog (S) - Har betydelse",DD,
249014,,Abia lonicerae,stekel,Art,2,Skog (S) - Stor betydelse,DD,
261452,,Abia nitens,stekel,Art,0,Jordbrukslandskap (J) - Stor betydelse,DD,'

df <- read_csv(str)

df2 <- df %>% 
  mutate(sql_string = glue("update redlist SET status_abbrev='{status_abbrev}' where id={id}"))

df2
#> # A tibble: 3 x 10
#>       id svenskt latin Organismgrupp Kategori Observationer Landskapstyp
#>    <dbl> <lgl>   <chr> <chr>         <chr>            <dbl> <chr>       
#> 1 249012 NA      Abia… stekel        Art                  3 Jordbruksla…
#> 2 249014 NA      Abia… stekel        Art                  2 Skog (S) - …
#> 3 261452 NA      Abia… stekel        Art                  0 Jordbruksla…
#> # … with 3 more variables: status_abbrev <chr>, Rodlistekriterium <lgl>,
#> #   sql_string <glue>

df2 %>% pull(sql_string)
#> update redlist SET status_abbrev='DD' where id=249012
#> update redlist SET status_abbrev='DD' where id=249014
#> update redlist SET status_abbrev='DD' where id=261452

代表 package (v0.3.0) 於 2020 年 7 月 27 日創建

這是你想要的?

對於數據庫集成,請查看DBI

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM