代码之家  ›  专栏  ›  技术社区  ›  Beardedant

合并Rstudio中格式不同的文件

  •  0
  • Beardedant  · 技术社区  · 6 年前

    对于我的硕士论文,我试图合并两个文件,它们包含以下内容: 一个是关于我的研究对象(海鸥)的指标,另一个是这些鸟类的繁殖成功率。

    然而,它们的格式不同:带有度量的文件已经在繁殖期的不同阶段采用了两行,因此一个人每年有多行。

    另一个繁殖成功的文件没有,每个个体每年只有一行,属于这些行的列表示每个繁殖阶段的繁殖参数。

    现在我知道我不能直接在Rstudio中“合并”这两个文件,所以我想知道如何格式化这些文件,这样我就可以了。

    我将添加图片以帮助解释: First file Second file

    提前非常感谢!

    1 回复  |  直到 6 年前
        1
  •  0
  •   whalea    6 年前

    您应该首先考虑为什么要合并这些文件。从我所看到的情况来看,最好将文件分开保存,因为在第一个文件中,您记录的是两个阶段的通用指标(标题相同),而在第二个文件中,您记录的是两个阶段的不同指标(标题不同)。

    由于第二个文件包含两个阶段的不同标题,因此无法将其转换为第一个文件的类似形式。但是,可以将第一个文件转换为第二个文件的格式,从而允许您合并这两个文件。然而,我强烈警告您不要这样做,因为这可能会妨碍您以这种方式快速分析数据。

    library(ggplot2)
    dat <- read.csv("file1.csv")
    # This plots a boxplot comparing the evenness of the 2 phases
    ggplot(dat, aes(x = as.factor(period), y = evenness)) + geom_boxplot()
    

    Boxplot sample

    但是,如果您坚持,下面是将file1重新格式化为每个条目的单行以与file2组合的代码

    # One more warning, depending on how you 
    # want to eventually wrangle your data, 
    # doing this might make your life more difficult
    
    library(dplyr)
    f1 <- read.csv("file1.csv", stringAsFactors = FALSE)
    dat1 <- dat[f1$phase == "incubating",]
    dat2 <- dat[f1$phase == "chickrearing",]
    dat2$phase <- dat1$phase <- NULL
    names(dat1) <- c("bird.year", paste0("incubating.", names(dat1)[2:length(names(dat1))]))
    names(dat2) <- c("bird.year", paste0("chickrearing.", names(dat2)[2:length(names(dat2))]))
    
    f1.combined <- merge(dat1, dat2, by = "bird.year")
    
    f2 <- read.csv("file2.csv")
    f2 <- mutate(f2, bird.year = paste(Individual, year))
    
    combined.files <- merge(f1.combined, f2, by = "bird.year")