我想使用ddply或group_by来基于数据框中的某一列中的值来更改现有数据框。
我有一个3列的数据框。我想找出ROI内已在DF $值的最大值每个ID和条件。因此,对于以下df,对于ID 1 + Match条件,ROI 3将被称为Max,对于ID 1 + NoMatch Condition,ROI 4将被称为Max,依此类推。
set.seed(1)
df <- data.frame("ID"=sort(rep_len(1:2, 12)), "ROI"=rep_len(1:6, 12), "Condition"=rep_len(c(rep_len("Match", 3), rep_len("NoMatch", 3)), 12), "Value"=runif(12), MaxROI="None")
我尝试使用ddply和group_by的一些组合。例如:
ddply(df, c("ID", "Condition"), mutate, MaxROI[which.max(Value)]="Max")
#generates an error
#Error: unexpected '=' in "ddply(df, c("ID", "Condition"), mutate, MaxROI[which.max(Value)]="
我已经看过这里了,但是我不想过滤数据框以使行保持最大值,而是对现有df进行了变异。
谢谢,
莫林玛伊
我们可以使用dplyr
。在按“ ID”,“条件”分组之后,通过将“值”与max
“值”进行比较case_when
来创建列“最大” ,以在其中存在最大“值”的地方创建“最大”字符串,否则默认为不适用
library(dplyr)
df %>%
group_by(ID, Condition) %>%
dplyr::mutate(Max =case_when(Value == max(Value) ~ "Max"))
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句