合并R中的数据帧

Mat*_*s B 11 csv r

嗨,我有很多CSV文件要处理.每个文件都是由算法运行生成的.我的数据总是有一个键和一个这样的值:

csv1:

        index value
  1     1     1
  2     2     1
  3     3     1
  4     4     1
  5     5     1
Run Code Online (Sandbox Code Playgroud)

CSV2:

      index value
1     4     3
2     5     3
3     6     3
4     7     3
5     8     3
Run Code Online (Sandbox Code Playgroud)

现在我想聚合这些CSV数据,如下所示:

当两个文件包含相同的密钥(例如5)时,结果行应包含密钥,两个文件共享(5)和两个值的平均值((1 + 3)/ 2 = 2).如果只有一个文件包含一个密钥(例如2),则该行只会添加到结果表中(key = 2,value = 1).

像这样的东西:

      index value
1     1     1
2     2     1
3     3     1
4     4     2 (as (1+4)/2 = 2)
5     5     2 (as (1+4)/2 = 2)
6     6     3
7     7     3
8     8     3
Run Code Online (Sandbox Code Playgroud)

起初我认为rbind()这样做,但它没有聚合值,只是连接数据.我如何用R实现这一目标?

flo*_*del 13

这是一个解决方案.到目前为止,我正在关注所有优秀的评论,希望通过向您展示如何处理任意数量的文件来增加价值.我假设您将所有csv文件放在同一目录中(my.csv.dir如下所示).

# locate the files
files <- list.files(my.csv.dir)

# read the files into a list of data.frames
data.list <- lapply(files, read.csv)

# concatenate into one big data.frame
data.cat <- do.call(rbind, data.list)

# aggregate
data.agg <- aggregate(value ~ index, data.cat, mean)
Run Code Online (Sandbox Code Playgroud)

编辑:在下面的评论中处理您更新的问题:

files     <- list.files(my.csv.dir)
algo.name <- sub("-.*", "", files)
data.list <- lapply(files, read.csv)
data.list <- Map(transform, data.list, algorithm = algo.name)
data.cat  <- do.call(rbind, data.list)
data.agg  <- aggregate(value ~ algorithm + index, data.cat, mean)
Run Code Online (Sandbox Code Playgroud)