我编写了一个函数,该函数执行2个嵌套的for循环,以计算每行可能的最高计算值。对于每一行,我将x输入到函数中。但是,该函数然后为每一行返回相同的值。
我尝试仅过滤与输入匹配的ID,但是,它似乎不起作用。
dd <- data.frame(x=c(3,4,5),id=c('A','B','C'))
foo <- function(x,a){
df <- data.frame(
"id" = character()
,"y" = numeric()
)
for(i in 1:2)
{
for(j in 1:2)
{
y<-x+i+j
df<- rbind(df, data.frame(
"id" = a
,"y" = y
)
)
}
}
# I tried this filtering but it still shows max calculated value from all 3 rows
result<-df%>%
filter(id==a)%>%
arrange(desc(y))%>%
head(1)
return(result$y)
}
dd%>% mutate(t=foo(dd$x, dd$id))
我期望的结果是返回每个循环的第一行y值的函数。
预期结果是。
x id t 1 3 A 7 2 4 B 8 3 5 C 9
但是我得到了
x id t 1 3 A 9 2 4 B 9 3 5 C 9
有人可以帮忙吗? 谢谢
答案 0 :(得分:0)
使用-
dd <- data.frame(x=c(3,4,5),id=c('A','B','C'))
foo <- function(x,a){
df <- data.frame(
"id" = character()
,"y" = numeric()
)
for(i in 1:2)
{
for(j in 1:2)
{
y<-x+i+j
df<- rbind(df, data.frame(
"id" = a
,"y" = y
)
)
}
}
# Replace with group_by, filter, max
result<-df%>%
group_by(id)%>%
filter(y == max(y))
return(result$y)
}
dd%>% mutate(t=foo(dd$x, dd$id))
输出
x id t
1 3 A 7
2 4 B 8
3 5 C 9
说明
您只需要照顾到result
值的group_by
的最后一个id
片段,并获取每个组的最大y
的所有行