根据因素访问data.frame的值

根据因素访问data.frame的值,r,dataframe,R,Dataframe,从像这样的data.frame开始 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 这将

从像这样的data.frame开始

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
这将创建具有标准化值的因子列表。但这导致了如何重新组合列表的问题,因为这些因素可能是不规则的(例如a、b、c、a、b、a、b、c、c、a、b),并且“时间”列中的相应因素也必须保留


我希望我的问题是清楚的,我将感谢您的帮助。

使用
dplyr
的解决方案。我假设您通过将每组的第一个值除以来进行规范化。如果通过将每组的最小值除以来进行规格化,请将
first(Val)
更改为
min(Val)


使用
dplyr
的解决方案。我假设您通过将每组的第一个值除以来进行规范化。如果通过将每组的最小值除以来进行规格化,请将
first(Val)
更改为
min(Val)


您可以将原始数据与包含分母信息的对象相结合(这将添加另一列),然后只需划分列:
merge(df,data.frame(Fac=c(“a”、“b”、“c”),denom=c(2、4、1))
什么是规范化?组中的每个值总是除以该组的最小值吗?@PoGibas也可以,谢谢。您可以将原始数据与包含分母信息的对象相结合(这将添加另一列),然后您只需拆分列:
merge(df,data.frame(Fac=c(“a”,“b”,“c”),denom=c(2,4,1)))
什么是正常化?一个组的每个值总是除以该组的最小值吗?@PoGibas这也行,谢谢
by(df,df$Fac,FUN=function(x)x["Val"]/x[["Val"]][1])
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
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)