我有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
答案 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)