【发布时间】:2023-12-25 02:47:02
【问题描述】:
由于我是 R 的新手,我不确定我是否能够正确表达我的问题,所以提前抱歉。我有一些具有给定值的字母。我为这些创建了一个数据框,并且我还有一个具有相同字母集的字符串。我想将数据帧中的值与字符串的每个字母对应,然后计算长度为 L 的窗口的平均值。我找不到做第一部分的方法,因为我不知道如何比较字符串字符与数据帧字符,然后将值分配给字符串字符以找到窗口的平均值。有什么建议吗?
A = data.frame(A = 0.429, C = -0.051, D = -2.024, E = -2.181, F = 0.836,
G = 0.158, H = -1.056, I = 0.959, K = -2.398, L = 0.658,
M = 0.470, N = -1.099, P = -0.675, Q = -1.564, R = -2.501,
S = -0.292, T = -0.182, V = 0.634, W = 0.463, Y = 0.163)
(a <- "MASEFKKKLFWRAVVAEF")
a_split = strsplit(a, "")
L = readline(prompt = "Enter window length: \n")
x = nchar(a)
for(i in 1:x-L)
{
for(j in a_split)
{
}
}
编辑 1: 好的,在您的帮助下,我想我正在取得一些进展。抱歉迟到了谢谢和回复。我想迭代 N(sequence length) - L(window length) + 1,因此我想要 N - L + 1 个窗口的平均值。然后我想将每个窗口的平均值对应于每个窗口的最中心氨基酸,例如对于前 10 个氨基酸,窗口的平均值将分配给氨基酸 5,然后将窗口 2-11 分配给氨基酸 6 等.
`
A = c(A = 0.429, C = -0.051, D = -2.024, E = -2.181, F = 0.836,
G = 0.158,H = -1.056,I = 0.959,K = -2.398,L = 0.658,
M = 0.470, N = -1.099, P = -0.675, Q = -1.564, R = -2.501, S = -0.292, T = -0.182, V = 0.634, W = 0.463, Y = 0.163)
cnt = 0
(a <- "MASEFKKKLFWRAVVAEFLATTLFVFISIGSALGFKYPVGNNQTAVQDNV")
a_split = strsplit(a, "")
unlist(A)[ a_split[[1]] ]
values <- A[ a_split[[1]] ]
L=5
N = nchar(a)
print(N)
for(i in 1:N-L)
{
print(convolve(values, rep(i,i + L-1) / L, type ="filter"))
print(i/2)
cnt = cnt + 1
}
print(cnt)
`
由于我不熟悉 R,我不完全了解卷积的工作原理,这是我的主要问题。
编辑 2: 我认为您正确理解了我的问题,对此我表示感谢。 我有一个 N 个元素的序列,我想查看该序列中是否有符合特定标准的部分。出于这个原因,我想要一个长度为 10 的窗口来搜索序列。对于每个窗口,平均值将分配给“中心”元素(我知道 5.5 在数学上是中心,但在这里四舍五入是完美的)。
在所有迭代完成后,我想查看每个窗口的值,并查看结果列表中是否至少有 L/2 个元素依次为正值。例如,如果结果中存在类似 ["5" = 0.5, "6" = 2.35, "7" = 0.15, "8" = 0.35, "9" = 0.5] 的子序列,即序列中至少有5个元素为正值,那么这部分序列(5-9)可能是跨膜区。当然,如果有更多的连续正值,该标准仍然适用。我的目标是找到这些可能是跨膜区域的区域。
我希望我能完成最后一部分,因为它不包括卷积,由于某种原因,这真的让我很为难。
非常感谢您的帮助!
【问题讨论】:
-
convolve()的第二个参数就像一个权重,convolve计算窗口上values的加权和。选择权重,使窗口中每个元素的权重为1 / window_size,即rep(1, window_size) / window_size,这样加权和就是平均值。我认为简单的结果convolve(values, rep(1, window_size) / window_size, type = "filter")正是您想要的(每个窗口中的平均值),但使用窗口的第一个字母,而不是中间字母,用于标识窗口的位置。 -
当我使用 rep(1, window_size) / window_size 我得到每个元素的平均值。我想打印和计算每个窗口元素的平均值。例如 1-10、2-11、3-12 等,第一个窗口的平均值将用于元素 5。我尝试更改 rep 中的参数,但它没有按预期工作。我输入:rep(i, window_size) / window_size 并且我将 values 参数更改为 values[i:i+L] 。
-
我更新了我的答案,以更全面地表明我对您的问题的理解。如果我不理解,那么也许您可以在您的问题中“手动”说明您的期望,至少对于一些氨基酸。
标签: r bioinformatics panel-data rollapply