使用循环,合并两个数据帧并逐个组合

时间:2016-11-17 20:41:44

标签: r loops

我有2个数据框,包含85个不同的ID和40个不同的组,所以我想使用循环,因为手动数据太多了。

这是我需要做的事情:

我想通过ID为每个组合并两个数据框,创建一个与Data X Area相乘的新列,然后按每个组提取单独的csv。每个组中的每个ID都有不同的区域,但每个组的ID数量相同。

这里是虚拟数据:

Group <- c(100,100,100,103,103,103,110,110,110)
ID <- c(1,2,3,1,2,3,1,2,3)
Area <- c(23,4,3,23,0,.5,7,2,33)

x <- data.frame(Group, ID, Area)

ID <- c(1,2,3)
Data <- c(.002,.4,1)

y <- data.frame(ID, Data)

所需输出(每组不同的csv):

Group    ID    Area    Data    A.D
 100      1     23      .002   .046
 100      2     4       .4     1.6
 100      3     3        1      3

2 个答案:

答案 0 :(得分:1)

如果我的问题正确,你可能会做某事。像:

library(dplyr)
merge(x, y, by = c("ID")) %>% 
  mutate(A.D = Area * Data) %>%
  arrange(Group)

哪个收益率:

  ID Group Area  Data    A.D
1  1   100 23.0 0.002  0.046
2  2   100  4.0 0.400  1.600
3  3   100  3.0 1.000  3.000
4  1   103 23.0 0.002  0.046
5  2   103  0.0 0.400  0.000
6  3   103  0.5 1.000  0.500
7  1   110  7.0 0.002  0.014
8  2   110  2.0 0.400  0.800
9  3   110 33.0 1.000 33.000

答案 1 :(得分:1)

您可以使用base

来完成此操作

1)在z中获取所有数据并执行新的列计算:

z <- merge(x, y)
z$data_x_aread <- z$Data * z$Area

2)现在按组拆分z,这是3 data.frames的列表:

df_list <-  split(z, Group)

3)从df_list抓取元素名称(这些只是组名)。并使用paste0创建有效的路径字符串。我们将这些存储在一个字符向量中:

vector_of_output_paths <- paste0("~/Desktop/", names(df_list), ".csv")

4)利用mapply并使用它来编写csv从data.frames获取df_list以及vector_of_output_paths中每个文件路径的相应文件路径:< / p>

mapply(write.csv, df_list, vector_of_output_paths)