R 对于每个变量类型,使用一个引用行划分所有行

R 对于每个变量类型,使用一个引用行划分所有行,r,R,我希望每种类型的变量n(A,B,C)的第一行都是参考行。我想把每一行,在n的每一类中,除以参考行(包括参考行本身)。我想我必须使用一些apply函数,但我不确定如何攻击它 我们可以使用数据表。将“data.frame”转换为“data.table”(setDT(df)),按“n”分组,循环其他列,除以参考行(第一行-x[1]) 如果需要,可以将其分配回感兴趣的列(:=) library(data.table) setDT(df)[, lapply(.SD, function(x) x/x[1])


我希望每种类型的变量n(A,B,C)的第一行都是参考行。我想把每一行,在n的每一类中,除以参考行(包括参考行本身)。我想我必须使用一些apply函数,但我不确定如何攻击它

我们可以使用
数据表
。将“data.frame”转换为“data.table”(
setDT(df)
),按“n”分组,循环其他列,除以参考行(第一行-
x[1]

如果需要,可以将其分配回感兴趣的列(
:=

library(data.table)
setDT(df)[, lapply(.SD, function(x) x/x[1]) , n]

如果希望“n2”保持不变,则在
.SDcols

setDT(df)[, (2:ncol(df)) := lapply(.SD, function(x) x/x[1]) , n]

基本R

library(dplyr)
df %?%
     group_by(n) %>%
     mutate_each(funs(./.[1]), setdiff(names(.), "n2"))

df[-1]太棒了!我要学习数据表!如果我有一个非数字列n2,我希望它保持不变,这也可能吗?晚了2分钟。也许你还应该包括
data.frame(df[c(1:2)]、sappy(df[-c(1,2)]、function(i)ave(i,df$n,FUN=function(j)j/j[1]))
使它更完整我看到了,不过谢谢你的帮助!非常感谢!
nm1 <- setdiff(names(df), c("n", "n2"))
setDT(df)[, (nm1) := lapply(.SD, function(x) x/x[1]) , n, .SDcols = nm1]
library(dplyr)
df %?%
     group_by(n) %>%
     mutate_each(funs(./.[1]), setdiff(names(.), "n2"))
df[-1] <- as.data.frame(sapply(df[-1], function(col) ave(col, df$n, FUN=function(x) x / x[1])))
df
   n     s        b        c
1  A 1.000 1.000000 1.000000
2  A 2.000 1.200000 1.050000
3  A 3.000 1.400000 1.100000
4  B 1.000 1.000000 1.000000
5  B 1.250 1.125000 1.043478
6  B 1.500 1.250000 1.086957
7  B 1.750 1.375000 1.130435
8  C 1.000 1.000000 1.000000
9  C 1.125 1.083333 1.037037
10 C 1.250 1.166667 1.074074