Accessing values of a data.frame depending on factors
从像这样的 data.frame 开始
1 2 3 4 5 6 7 8 9 10 11 12 13 | df<-NULL Time<-c(1,1,1,2,2,3) Fac<-c("a","b","c","a","b","c") Val<-c(1,4,6,7,8,43) df<-data.frame(Time,Fac,Val) Time Fac Val 1 a 2 1 b 4 1 c 6 2 a 7 2 b 8 3 c 43 |
我想根据 "Fac" 中的因素对 "Val" 的每个值进行归一化。
例如对于因子 a:我想将 "Val" 中的每个值除以因子 "a" 槽 2。对于因子 "b","Val" 中的每个值都与因子 "b " 槽 4.
我试过用
1 | by(df,df$Fac,FUN=function(x)x["Val"]/x[["Val"]][1]) |
这将创建具有归一化值的因子列表。但这导致了如何再次组合列表的问题,因为因子可能是不规则的(例如a,b,c,a,b,a,b,c,c,a,b)和相应的因子在"Time" 列也必须保留。
我希望我的问题很清楚,我会很感激每一个帮助。
使用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | library(dplyr) dat2 <- dat %>% group_by(Fac) %>% mutate(Val = Val/first(Val)) %>% ungroup() dat2 # # A tibble: 6 x 3 # Time Fac Val # <dbl> <fct> <dbl> # 1 1 a 1 # 2 1 b 1 # 3 1 c 1 # 4 2 a 7 # 5 2 b 2 # 6 3 c 7.17 |
编码风格建议:
示例数据创建:
1 2 3 4 | Time<- c(1,1,1,2,2,3) Fac <- c("a","b","c","a","b","c") Val <- c(1,4,6,7,8,43) dat <- data.frame(Time,Fac,Val) |