gpt4 book ai didi

r - 对多个 data.tables 执行多项操作

转载 作者:行者123 更新时间:2023-12-05 01:04:03 27 4
gpt4 key购买 nike

我真的需要学习如何做到这一点,因为我一直在以可怕的、可怕的痛苦的方式做这件事太久了。我有一个我想要的数据框列表:

  • 转换为数据表
  • 上执行三个功能
  • 输出到plyr的join_all的新列表

  • 自动执行这些操作的最佳方法是什么,这样我就不会为每个数据框实例编写函数。对我来说,一个棘手的部分是在对 data.tables 列表进行操作的同时访问habitat_names 向量中的名称。这是我现有的代码:
    iucn_1_4 <- data.table(read.csv("~/Projects/ClimateChange/Random/IUCN/1.4 Temperate Forest.csv"))
    iucn_1_6 <- data.table(read.csv("~/Projects/ClimateChange/Random/IUCN/1.6 Subtropical_Tropical Moist Lowland Forest.csv"))
    iucn_1_7 <- data.table(read.csv("~/Projects/ClimateChange/Random/IUCN/1.7 Subtropical_Tropical Mangrove Forest Vegetation Above High Tide Level.csv"))
    iucn_1_8 <- data.table(read.csv("~/Projects/ClimateChange/Random/IUCN/1.9 Subtropical_Tropical Moist Montane Forest.csv"))
    iucn_4_4 <- data.table(read.csv("~/Projects/ClimateChange/Random/IUCN/4.4 Temperate Grassland.csv"))
    iucn_4_5 <- data.table(read.csv("~/Projects/ClimateChange/Random/IUCN/4.5 Subtropical_Tropical Dry Lowland Grassland_Colombia_Venezuela and Bolivia.csv"))

    habitat_names <- c("1.4 Temperate Forest","1.6 Subtropical/Tropical Moist Lowland Forest","1.7 Subtropical/Tropical Mangrove Forest Vegetation Above High Tide Level","1.8 Subtropical/Tropical Swamp Forest","4.4 Temperate Grassland","4.5 Subtropical/Tropical Dry Lowland Grassland")

    iucn_1_4[,SCI_NAME:=paste(Genus, Species, " ")]
    iucn_1_4[,habitat_names[1]:=TRUE]
    iucn_1_4.out <- iucn_1_4[,c("SCI_NAME", habitat_names[1]),with=FALSE]

    iucn_1_6[,SCI_NAME:=paste(Genus, Species, " ")]
    iucn_1_6[,habitat_names[2]:=TRUE]
    iucn_1_6.out <- iucn_1_6[,c("SCI_NAME", habitat_names[2]),with=FALSE]

    iucn_1_7[,SCI_NAME:=paste(Genus, Species, " ")]
    iucn_1_7[,habitat_names[3]:=TRUE]
    iucn_1_7.out <- iucn_1_7[,c("SCI_NAME", habitat_names[3]),with=FALSE]

    iucn_1_8[,SCI_NAME:=paste(Genus, Species, " ")]
    iucn_1_8[,habitat_names[4]:=TRUE]
    iucn_1_8.out <- iucn_1_8[,c("SCI_NAME", habitat_names[4]),with=FALSE]

    iucn_4_4[,SCI_NAME:=paste(Genus, Species, " ")]
    iucn_4_4[,habitat_names[5]:=TRUE]
    iucn_4_4.out <- iucn_4_4[,c("SCI_NAME", habitat_names[5]),with=FALSE]

    iucn_4_5[,SCI_NAME:=paste(Genus, Species, " ")]
    iucn_4_5[,habitat_names[6]:=TRUE]
    iucn_4_5.out <- iucn_4_5[,c("SCI_NAME", habitat_names[6]),with=FALSE]

    最佳答案

    您还可以使用 Map 来避免 for 循环。示例代码

    library(data.table)

    dt1 <- data.table(v1 = 1:10, v2 = c("a", "b")) # eg iucn_1_4
    dt2 <- data.table(v1 = 1:10, v2 = c("a", "b", "c", "d", "e")) # eg iucn_1_6
    names <- c("name1", "name2") # replace by habitat_names

    f <- function(dt, name) {
    dt[, SCI_NAME := paste0(v1, v2)] # replace v1, v2 by Genus, Species
    dt[, eval(name) := TRUE]
    dt[, c("SCI_NAME", ..name)]
    }

    res <- Map(f, list(dt1, dt2), names)

    然后你可以在 res 上调用 join_all (如果我理解正确,那是你的目标)

    关于r - 对多个 data.tables 执行多项操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23958725/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com