r - 当行位置是动态的时,将变量分配给数据框中的特定单元格
问题描述
这里的目标是自动化数据处理管道,我可以在其中读取 .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 值。
关于这样做的好方法有什么想法吗?谢谢你。
解决方案
您可以将变量 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
推荐阅读
- authentication - Blazor Wasm 身份登录/注销事件
- java - 修复错误:为 org.gradle.java.home Gradle 属性提供的值“/Library/Java/JavaVirtualMachines/jdk1.8.0_281.jdk/Contents/Home”无效
- log4j - 相当于 log4j2 中的 PropertyConfigurator.configureAndWatch()?
- hadoop - Mac 上的 Ambari 警报(沙盒)
- python - 在二进制列表中查找重复 0 的位置
- acumatica - 无法在 Acumatica Graph Extension 中使用受保护的方法覆盖
- mongodb - 猫鼬聚合直到文档总和等于某个值
- powerquery - Power Query:将 3 个表加在一起,按列名求和
- linux - i2c 和 Linux(127 个设备和 i2cdetect 问题)
- server - 如何从远程闭路电视系统中找到 RTSP 地址?