我在表“ SampleFileName”中有一个表“ inputdf”,表中的样品名称以随机顺序排列。
> colnames(inputdf)
[1] "Dye/SamplePeak" "SampleFileName" "Marker" "Allele" "Size" "Height"
[7] "Area" "DataPoint" "flank" "correction" "start" "end"
[13] "control" "iithreshold" "CAG"
Run Code Online (Sandbox Code Playgroud)
我正在使用“高度”列中的tidyr传播结果分成单独的列,每列均由“ SampleFileName”中的值命名。
library(tidyr)
height <- spread(inputdf, key=SampleFileName, value=Height, fill = 0, convert = FALSE) #Extract heights into separate columns for each sample
Run Code Online (Sandbox Code Playgroud)
我的样本在“ SampleFileName”列中不是按字母顺序排列的,我想按此顺序排列。但是,spread会自动按字母顺序对它们进行排序。感谢您的帮助!
> colnames(height)
[1] "Dye/SamplePeak" "Marker"
[3] "Allele" "Size"
[5] "Area" "DataPoint"
[7] "flank" "correction"
[9] "start" "end"
[11] "control" "iithreshold"
[13] "CAG" "A01_MF20170522_FA_A01_2017-05-22_1.fsa"
[15] "A01_MF20170623_FA_A01_2017-06-23_1.fsa" "A02_MF20170623_FA_A02_2017-06-23_1.fsa"
[17] "A03_MF20170623_FA_A03_2017-06-23_1.fsa" "A05_MF20170623_FA_A05_2017-06-23_1.fsa"
[19] "A06_MF20170623_FA_A06_2017-06-23_1.fsa" "A07_MF20170623_FA_A07_2017-06-23_1.fsa"
[21] …Run Code Online (Sandbox Code Playgroud) 我得到了 x 轴上的时间(秒)和 y 轴上的强度(以相对荧光单位或 rfu 表示)的数据。它是通过观察 DNA 片段通过相机而生成的——DNA 片段越大,时间就越长。有 23 个已知大小的片段(以 DNA 碱基对单位 bp 为单位),因此应该有 23 个峰。由于我知道 DNA 片段的大小(以 bp 为单位),因此我想使用线性模型重新校准 x 轴,从时间(秒)到碱基对 (bp)。
不幸的是,数据中存在大量噪声,会产生虚假峰值。自信地区分真假的唯一方法是假碱基与 DNA 碱基对中的预期模式不符。
我已在此链接中的名为 demo 的数据框中提供了一个示例的数据。不幸的是它太大了,无法粘贴到下面。
https://1drv.ms/t/s!AvBi5ipmBYfrhf0v_kvWuN2foLyBgg?e=RWfdXZ
我可以如下选出所有峰值。
library(ggplot2)
library(ggpmisc)
ggplot(demo, aes(x=time, y=rfu)) +
geom_line(size=0.1) +
stat_peaks(col = "red", span=5, ignore_threshold=0.1) +
theme_bw()
Run Code Online (Sandbox Code Playgroud)
然而,这些是预期的 DNA 片段大小(以 bp 为单位):
ladder <- c(50, 75, 100, 125, 150, 200, 250, 300, 350, 400, 450, 475, 500, 550, 600, 650, 700, 750, 800, 850, 900, 950, 1000)
Run Code Online (Sandbox Code Playgroud)
这是一个选出了正确峰值的图:
有没有办法让峰值查找器(例如 …
我想在 geom_col 图上仅在模态条(最高峰)上方放置一个标签,给出 x 轴值 (CAG)。这是一个例子,但我只能让它标记每个峰值。
x <- seq(-20, 20, by = .1)
y <- dnorm(x, mean = 5.0, sd = 1.0)
z <- data.frame(CAG = 1:401, height = y)
ggplot(z, aes(x=CAG, y=height)) +
geom_col() +
geom_text(aes(label = CAG))
Run Code Online (Sandbox Code Playgroud)
如果您能帮助我仅标记最高峰,我将非常感激
我想通过使用变量以动态方式使用 dplyr 重命名列。但是,它只是为列命名变量的名称,而不是其内容。有任何想法吗??
colnames(y)
[1] "time" "channel_1" "channel_2" "channel_3" "channel_4" "channel_5" "correction" "channel.corr"
ladder.channel <- "channel_4"
fsa.bc <- y %>%
select(-c(all_of(ladder.channel), "correction")) %>%
rename(ladder.channel = channel.corr)
colnames(fsa.bc)
"time" "channel_1" "channel_2" "channel_3" "channel_5" "ladder.channel"
Run Code Online (Sandbox Code Playgroud) I\xe2\x80\x99d 喜欢动态分配要相互减去的列。我\xe2\x80\x99已经阅读了一圈,看起来我需要使用all_of,也许across(如何使用 dplyr 从 R 中的数据帧中的多列中减去一列,如何在 dplyr 过滤器中使用对象?)。我可以让它适用于变异短语中的一个变量(例如mutate(y = all_of(x))),但我可以\xe2\x80\x99t 似乎可以使用两个变量进行简单的计算。Here\xe2\x80\x99s 是我想要做的事情的简化示例:
var1 <- c("Sepal.Length")\nvar2 <- c("Sepal.Width")\n\nresult <- iris %>%\n mutate(calculation = all_of(var1) - all_of(var2))\nRun Code Online (Sandbox Code Playgroud)\n 我可以使用变量来表示 中的列名称dplyr mutate,只要它位于计算部分的右侧即可。这工作正常:
library(dplyr)
var <- "mass"
x <- starwars %>%
mutate(height = height * 2,
mass = get(var) * 2)
Run Code Online (Sandbox Code Playgroud)
但是,如果我尝试使用变量来表示新的列名称(即在左侧),则会抛出错误。例如,这会导致错误:
var <- "mass"
x <- starwars %>%
mutate(height = height * 2,
get(var) = get(var) * 2)
Run Code Online (Sandbox Code Playgroud)
如何在 中使用变量作为列名mutate?