我在一个名为df.list的对象中有许多 Dataframe 。下面是两个 Dataframe 的示例:
> dput(df.list$GF.1.GULUPA.1.F1)
structure(list(Evaluacion2 = c("5.1", "5.2"), Sistema = c(1,
1), Fertilizacion = c("F1", "F1"), Asocio = c("GF", "GF"), Cultivo = c("GULUPA",
"GULUPA"), Bloque = c(1, 1), `Altura de planta` = c(3.3, 5.1)), row.names = c(NA,
-2L), class = c("tbl_df", "tbl", "data.frame"))
> dput(df.list$MF.1.MORA.1.F1)
structure(list(Evaluacion2 = c("1.1", "1.2", "3.1", "3.2", "4.1",
"4.2", "5.1", "5.2"), Sistema = c(1, 1, 1, 1, 1, 1, 1, 1), Fertilizacion = c("F1",
"F1", "F1", "F1", "F1", "F1", "F1", "F1"), Asocio = c("MF", "MF",
"MF", "MF", "MF", "MF", "MF", "MF"), Cultivo = c("MORA", "MORA",
"MORA", "MORA", "MORA", "MORA", "MORA", "MORA"), Bloque = c(1,
1, 1, 1, 1, 1, 1, 1), `Altura de planta` = c(11.3, 11.7, 42,
62, 57.1, 51.3, 90.1, 70.2)), row.names = c(NA, -8L), class = c("tbl_df",
"tbl", "data.frame")))
我需要提取植物高度列的值,根据dataframe的名称标记。具体如下:
df.a<-select(df.list$GF.1.GULUPA.1.F1, c("Evaluacion2", "Altura de planta"))
df.b<-select(df.list$MF.1.MORA.1.F1, c("Evaluacion2", "Altura de planta"))
names(df.a)<-c("Evaluacion2", "GF.1.GULUPA.1.F1 Altura de planta")
names(df.b)<- c("Evaluacion2", "MF.1.MORA.1.F1 Altura de planta")
df.j<-df.a%>%full_join(df.b)
> dput(df.j)
structure(list(Evaluacion2 = c("5.1", "5.2", "1.1", "1.2", "3.1",
"3.2", "4.1", "4.2"), `GF.1.GULUPA.1.F1 Altura de planta` = c(3.3,
5.1, NA, NA, NA, NA, NA, NA), `MF.1.MORA.1.F1 Altura de planta` = c(90.1,
70.2, 11.3, 11.7, 42, 62, 57.1, 51.3)), row.names = c(NA, -8L
), class = c("tbl_df", "tbl", "data.frame"))
我需要对df.list对象中的列表的所有 Dataframe 执行此操作。请帮帮我非常感谢!
2条答案
按热度按时间wkftcu5l1#
如何运作
imap
遍历df.list
,其中.x
是列表元素(在本例中是 Dataframe ),.y
是列表名称(例如,“GF.1.GULUPA.1.F1”)。select
获取所需的列,然后set_names
使用.y
作为列表名称的前缀。reduce
将遍历所有数据框列表,执行完全连接并输出单个数据框注意:如果您决定选择不止这两个列,一个更动态的选项将是,而不是为 all 列设置名称,只重命名您的目标列
Altura de planta
。因此,将set_names
行替换为:正如@M的评论中所提到的--您也可以直接在
select
语句中重命名,以获得更简洁的代码。输出
数据
0md85ypi2#
你可以先使用
purrr::list_rbind()
来绑定 Dataframe ,它可以方便地将 Dataframe 名称存储在结果 Dataframe 的一列中。从那里开始转向边路。输入数据:
创建于2023-05-11带有reprex v2.0.2