循环r中的groupby列并应用函数
大家好,我需要帮助才能按列组在数据帧上循环 下面是dataframe的一个示例循环r中的groupby列并应用函数,r,dplyr,R,Dplyr,大家好,我需要帮助才能按列组在数据帧上循环 下面是dataframe的一个示例 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
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$组,df$种)
2-获取df$值
并将其存储为向量
3-将该向量放入名为a函数的函数中
4-使用另一个函数打开一个treefile
,其中其名称为df$Group name
5-获取该函数的输出值
,并将其添加到新列
下面是代码应该做什么的示例:
第一组为G1,Cattus\u Cattus
:
Group Species Values
1 G1 Cattus_cattus Val1
2 G1 Cattus_cattus Val2
3 G1 Cattus_cattus Val3
然后我用treefile打开treefile
,下面是您的操作方法:
anotherfunction = function(x){
#do something with your treefile
ifelse("Val2" %in% x, 30, ifelse("Val4" %in% x, 21, NA))
}
df %>%
group_by(Group) %>%
mutate(new_column=anotherfunction(Values))
您没有提供关于另一个函数()的大量信息,因此我使用了一个丑陋的嵌套的ifelse()
来模拟该行为
关键是mutate()
将使用组内的值
要探索这一点,您可以尝试运行以下代码:
anotherfunction = function(x){browser()}
您可以尝试以下方法:
library(dplyr)
library(purrr)
df %>%
group_by(Group) %>%
summarise(treefile = anotherfunction(first(Group)),
Values = list(Values)) %>%
mutate(new_column = map2_dbl(treefile, Values, afunction))
这将为您提供一个摘要数据帧。要返回相同数量的行,您可以通过组使用df
左联合
anotherfunction = function(x){
#do something with your treefile
ifelse("Val2" %in% x, 30, ifelse("Val4" %in% x, 21, NA))
}
df %>%
group_by(Group) %>%
mutate(new_column=anotherfunction(Values))
anotherfunction = function(x){browser()}
library(dplyr)
library(purrr)
df %>%
group_by(Group) %>%
summarise(treefile = anotherfunction(first(Group)),
Values = list(Values)) %>%
mutate(new_column = map2_dbl(treefile, Values, afunction))