在R中:如何从第n个单元格中取值并从第n列中的每个单元格中减去

在R中:如何从第n个单元格中取值并从第n列中的每个单元格中减去,r,R,假设我有一个如下所示的数据集: subvalues <- c(1:10) df <- data.frame(x = rpois(40,2), y = rpois(40,2), z = rpois(40,2), q = rpois(40,2), t = rpois(40,2)) 子值可以使用外部 outer(df$x, subvalues, `-`) outer(df$z, subvalues, `-`) 在一个循环中,它将是 lapply(df[c('x', 'z')], ou

假设我有一个如下所示的数据集:

subvalues <- c(1:10)

df <- data.frame(x = rpois(40,2), y = rpois(40,2), z = rpois(40,2), q = rpois(40,2), t = rpois(40,2))

子值可以使用
外部

outer(df$x, subvalues, `-`)
outer(df$z, subvalues, `-`)
在一个循环中,它将是

lapply(df[c('x', 'z')], outer, subvalues, `-`)

如果我们想在
tidyverse中执行此操作

library(dplyr)
library(purrr)
df %>%
    mutate_at(vars(x, z), list(newcol =  ~map(., ~ .x - subvalues))) %>%
    unnest(ends_with('newcol')) %>% 
    cbind(subvalues) 

或与
交叉

imap(df %>%
       select(x, z), ~ crossing(!! .y := .x, subvalues) %>% 
                          mutate(!! str_c('diff', .y) := reduce(., `-`))) %>% 
   bind_cols

谢谢你的回答,这很有帮助,但并不能完全解决问题-这些解决方案在每列上使用子值中的单元格-我试图做的是专门从子值中选择一个单元格(比如第一个单元格),并在x中的每行上使用该单元格进行减法,然后从子值中选择特定的单元格2,并在y的每一行上使用该单元格进行减法运算这将产生一个新列(x2),其行数与x一样多(不多也不少),而且我需要选择“每n个”列(每2个),因为实际数据集的大小不允许我选择manually@Icewaffle请使用输入示例的预期输出更新您的帖子。此外,使用
种子
进行再现性,我已经添加了预期输出。很抱歉搞得一团糟,我没有弄清楚如何进行缩进(4个空格不起作用),我希望它是可破译的。外部还提供一个矩阵输出,即
外部(df$x,subvalues,
-
)[,c(FALSE,TRUE)]
每2列选择一次外部函数的问题是1:因为数据的大小(数千列)手动调用列对我来说是不可行的(df$x,df$y是不可行的,我需要一个函数/循环,它将以df$I+1或类似的方式系统地自动地遍历列)2:它仍然从子值中获取每个单元格并在每列上使用-我需要的是,当为x(x2)生成新列时,它从子值中获取第一个单元格,当为y(y2)生成新列时,使用子值中的第二个单元格,等等。