首页 > 解决方案 > 当行位置是动态的时,将变量分配给数据框中的特定单元格

问题描述

这里的目标是自动化数据处理管道,我可以在其中读取 .csv 文件并运行脚本并输出处理后的文件,为数据绘图做好准备。我所做的只是对几列应用一些操作,但自动化一步对我来说还不清楚:

我需要将一列中的值除以另一列中的值,但在除法之前,我需要从特定单元格中减去一个值。但是,在每个不同的 .csv 中,特定单元格的位置都会发生变化,因此我不能简单地将列/行单元格提取为变量并使用它。作为示例数据框:

df<-

sampleid  t1    t2
a1        4     15
a2        3     18
a3        7     30
b1        6     17
blank     1     5

那么函数将是

df <- df %>% mutate(ri=(t1-1)/(t2-1))

从 t1 和 t2 中减去的“1”来自“空白”行“t1”值。我想创建一个该单元格值的变量,以代入该方程(有时它不是 1)。csv/data 框中的特定行会根据总样本数而变化,所以我不能每次都选择一个固定的单元格。

理想情况下,它只是

df <- df %>% mutate(ri=(t1-x)/(t2-x))

其中“x”被分配给数据框中的空白 t1 值。

关于这样做的好方法有什么想法吗?谢谢你。

标签: rdataframedplyr

解决方案


您可以将变量 x 添加为列,然后使用您的公式(然后再次删除 x):

library(tidyverse)

df <- read.table(text = "sampleid  t1    t2
a1        4     15
a2        3     18
a3        7     30
b1        6     17
blank     1     5", header = TRUE, stringsAsFactors = FALSE)

df %>%
  mutate(x = df %>%
           filter(sampleid == "blank") %>%
           pull(t1)) %>%
  mutate(ri = (t1 - x) / (t2 - x)) %>%
  select(-x)

# sampleid t1 t2        ri
# 1       a1  4 1 0.2142857
# 2       a2  3 1 0.1176471
# 3       a3  7 1 0.2068966
# 4       b1  6 1 0.3125000
# 5    blank  1 1 0.0000000

推荐阅读