大家好,我需要帮助才能按列组循环遍历数据框。
这是数据框的示例
Group Species Values
1 G1 Cattus_cattus Val1
2 G1 Cattus_cattus Val2
3 G1 Cattus_cattus Val3
4 G2 Canis_lupus Val4
5 G2 Canis_lupus Val5
6 G3 Griseus_lupa Val6
7 G4 Griseus_lupa Val7
我想:
1 - 走过去 c(df$Group,df$Species)
2 - 将其df$Values
存储为vector
3 - 将该向量放入一个名为的函数中 afunction
4 -打开一个treefile
与anotherfunction
其中它的名字是df$Group name
5 - 获取该output value
函数的 并将其添加到new_column
所以这里是代码应该做什么的一个例子:
第一组是G1,Cattus_cattus
:
Group Species Values
1 G1 Cattus_cattus Val1
2 G1 Cattus_cattus Val2
3 G1 Cattus_cattus Val3
然后我打开treefile
与treefile <- anotherfunction(G1)
然后我生成输出值,如 output_value<-afunction(treefile,c("Val1","Val2","Val3))
那么 output_value = 30
所以我将 30 添加到 df 中:
Group Species Values new_column
1 G1 Cattus_cattus Val1 30
2 G1 Cattus_cattus Val2 30
3 G1 Cattus_cattus Val3 30
如果组中只有一行,那么我什么都不做并添加一个 NA。
请注意,当然它是一个不存在的函数,因此您无法重现该示例。
我们应该得到类似的东西(这里的new_column
值是随机的)。
Group Species Values new_column
1 G1 Cattus_cattus Val1 30
2 G1 Cattus_cattus Val2 30
3 G1 Cattus_cattus Val3 30
4 G2 Canis_lupus Val4 21
5 G2 Canis_lupus Val5 21
6 G3 Griseus_lupa Val6 NA
7 G4 Griseus_lupa Val7 NA
有人有想法吗?到目前为止,我知道如何使用 for 循环遍历数据帧,但在这里我不知道如何处理由 2 列组成的组。
数据
structure(list(Group = structure(c(1L, 1L, 1L, 2L, 2L, 3L, 4L
), .Label = c("G1", "G2", "G3", "G4"), class = "factor"), Species = structure(c(2L,
2L, 2L, 1L, 1L, 3L, 3L), .Label = c("Canis_lupus", "Cattus_cattus",
"Griseus_lupa"), class = "factor"), Values = structure(1:7, .Label = c("Val1",
"Val2", "Val3", "Val4", "Val5", "Val6", "Val7"), class = "factor")), class = "data.frame", row.names = c(NA,
-7L))
你可以尝试这样的事情:
library(dplyr)
library(purrr)
df %>%
group_by(Group) %>%
summarise(treefile = anotherfunction(first(Group)),
Values = list(Values)) %>%
mutate(new_column = map2_dbl(treefile, Values, afunction))
这将为您提供一个汇总的数据框。要获得相同数量的行,您可以left_join
使用df
by Group
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句