我有一个数据框,其中包含多组前/后测量值,我想为每个测量值创建一个新列,以计算每个变量的差异(变化)。
示例数据
df <- structure(list(Leptin_OVX = c(101537.030773452, 34184.1969018313,
54567.1867690491, 29558.5420636246, 40929.680418857), Leptin_SAC = c(19785.945743781,
124224.32770312, 89539.7367479193, 29335.4677793977, 49085.7085270132
), MIP1A_OVX = c(198.955714001384, 9.39084362457698, 6.31036668689314,
31.4248133610863, 61.7242016227428), MIP1A_SAC = c(152.595958885867,
0, 6.31036668689314, 12.0518867341972, 56.3458462409656), IL4_OVX = c(84.3973038052031,
0, 0, 84.3973038052031, 0), IL4_SAC = c(0, 0, 0, 0, 0), IL1B_OVX = c(20.5433459761151,
0, 0, 0, 26.9522602664794), IL1B_SAC = c(0, 18.9503177384518,
14.986896887192, 0, 0)), row.names = c(NA, -5L), class = c("tbl_df",
"tbl", "data.frame"))
我可以手动执行以下操作:
df <- df %>%
mutate(chg_Leptin = Leptin_SAC - Leptin_OVX) %>%
mutate(chg_MIP1A = MIP1A_SAC - MIP1A_OVX) %>%
mutate(chg_IL4 = IL4_SAC - IL4_OVX) %>%
mutate(chg_IL1B = IL1B_SAC - IL1B_OVX)
我试图找出一种方法,在所有剩余列的循环中执行此操作,我想从相关的“_OVX”列中减去“_SAC”列中的值
谢谢你的帮助!
3条答案
按热度按时间fivyi3re1#
我们可以使用
across
,但名称会发生一些变化:guicsvcw2#
考虑简单的矩阵算术减去整个列块:
MyCompiler.io Demo
ma8fv8wu3#
**Solution1 map_dfr:**一个优雅的方法来完成这样的任务是视觉上分开要减去的对:
我们得到了所有的对:
对于
purrr
smap_dfr
和reduce
,我们将-
(减法)应用于所有对,重命名并与原始 Dataframe 绑定:**解决方案2整形:**如果事情太复杂(特别是初学者),长格式的整形将有助于掌握整个过程:
下面是一个长格式的解决方案:
解决方案3 map2_df: