循环r中的groupby列并应用函数

循环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

大家好,我需要帮助才能按列组在数据帧上循环

下面是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  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))