我有以下数据框,

df <- tibble(x = c(2, 3, 4)) %>% 
mutate(`1` = 99, `2` = 88, `3` = 77, `4` = 66, `5` = 55)

x列包含需要操作的列名,该列中的值必须替换为第x-1xx+1列中的值之和.例如,对于x为2的第一行,第2列中的值必须替换为(99+88+77)=264.

我试着使用双花括号({{}})和:=,如下所示,

df %>% 
  mutate("{{x}}" := {{x-1}} + {{x}} + {{x+1}})

但我得到了以下错误,

然后我试着用下面的across()中的cur_column()来访问专栏,

df %>% 
  mutate(across(-x, ~if_else(x == cur_column(), {{cur_column()}}, .x)))

我得到了与上面相同的错误,我想我可能是错误地使用了curl 运算符,有人能帮忙吗?

推荐答案

{{}}语法用于将未计算的表达式传递给dplyr命令时,不用于捕获列值.

大多数情况下,在每行的不同列上执行不同的选项并不容易.另一种方法是reshape 数据,以便使用超前/滞后函数.然后你可以转回来.

library(dplyr)
library(tidyr)
df %>% 
  mutate(row = row_number()) %>% 
  pivot_longer(!c(x, row)) %>% 
  mutate(name = as.integer(name)) %>% 
  group_by(row) %>% 
  mutate(value=if_else(x==name, value + lead(value) + lag(value), value)) %>% 
  pivot_wider(c(row, x)) %>% 
  select(-row)

#     row     x   `1`   `2`   `3`   `4`   `5`
#   <int> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
# 1     1     2    99   264    77    66    55
# 2     2     3    99    88   231    66    55
# 3     3     4    99    88    77   198    55

另一种 Select 是创建一个助手函数,该函数可以通过rowwise()访问cur_column()cur_data(),以便为每一行创建不同的转换.


colclump <- function(target) {
  prevc <- as.character(as.integer(target)-1)
  nextc <- as.character(as.integer(target)+1)
  function(x) {
    if (cur_column()==target) {
      x + cur_data()[[prevc]] + cur_data()[[nextc]]
    } else {
      x
    }
  }
  
}
df %>% 
  rowwise() %>% 
  mutate(across(-x, ~colclump(x)(.x)))

R相关问答推荐

当使用stat_summary()+ after_stat()在图表上标记中位数/均值时,如何整齐地定位geom_text标签

在' geom_contour_filled()'中对齐两个gplot的 colored颜色 比例

仅返回R中所有其他列的列ID和年份缺失(NA)数据的列表

指定要保留在wrap_plots中的传奇

按自定义数字模式对变量名称排序

手工PCA上的载体与输出双图不匹配

如何创建具有总计列和ggplot 2所有条线的百分比标签的堆叠条形图?

给定R中另一行中的值,如何插补缺失值

通过绘图 Select 线串几何体并为其着色

单击 map 后,将坐标复制到剪贴板

selectInput不返回ALL,并将因子转换为shiny 的数字

用相同方法得到不同函数的ROC最优截断值

R中的时间序列(Ts)函数计数不正确

如何使用ggplot对堆叠条形图进行嵌套排序?

如何指定我的函数应该查找哪个引用表?

从服务器在Shiny中一起渲染图标和文本

根据1个变量绘制 colored颜色 发散的 map ,由另一个变量绘制饱和度,ggplot2不工作

在使用具有Bray-Curtis相似性的pvCluust时计算p值

观察器中的inaliateLater的位置

如何预测原始数据集并将值添加到原始数据集中