我正在尝试以这样的方式编写代码来利用脚本,因为我经常以这种格式输出并且必须逐个复制/粘贴到Excel中才是真正的苦差事。但是,在实现这些功能方面我很困惑。
所以,我的数据采用以下形式:
Condition Sample1 Sample2 .... Sample n
T1 6.99 5.80 .... n_1
T2 2.05 3.04 .... n_1
T3 4.50 4.69 .... n_1
T4 4.71 5.22 .... n_1
T5 5.66 3.65 .... n_1
T6 9.76 2.89 .... n_1
我需要应用以下等式:,其中x是单独的条目,n是系数,因此完整的等式看起来像这样:
。
基本上,每列,我需要按顺序考虑每个元素并将其乘以一个连续系数(奇数从1:长度条件),以获得每个样本的答案 S 。我的数据集的大小不会改变 - 它将始终是T1:T6,将改变的是样本1 ... n。理想情况下, S 的值将附加在列的底部,或者保存在单独的数据集中,并参考其所属的样本。
我尝试了很多解决方案,包括调换,但似乎无法绕过它。
我目前在数据集的一部分上实现更简单功能的尝试没有成功。
for (i in 2:8){dT[7,i] <-
((1*dT[1,i])+(3*dT[2,i])+(5*dT[3,i])+(7*dT[4,i])+(9*dT[5,i]))+(11*dT[6,i])
}
我认为正确的解决方案涉及某种*适用但我对于如何正确使用它们完全无能为力。
编辑:添加可重现的示例:
N Condition Sample A Sample B Sample C Sample D
1 T1 91.323 78.758 70.298 66.765
3 T2 -3.737 -1.5 -7.744 -9.247
5 T3 5.205 4.533 2.284 2.178
7 T4 -0.486 -0.068 -1.386 -0.927
9 T5 0.337 -0.139 0.087 0.055
S -0.046296296 -0.123654391 0.394039047 0.445258425
答案 0 :(得分:0)
这样,你想做什么?
per_row <- function(row){
l <- length(row)
exp <- 2*(1:l)-1 # all the exponents
each <- row*(-1)^exp # compute all of these at once
return(sum(each)) # return sum
}
#some sample data
datafr <- data.frame(a = sample(1:6), b = 1:6)
#apply per column
apply(datafr, 2, per_row)
答案 1 :(得分:0)
这个怎么样?它应该与您拥有的SampleN列的数量无关。请注意,它是专门针对您的6个条件情况设计的,只有6个奇数的乘数,但您说不会改变所以它应该没问题。
Sleep
答案 2 :(得分:0)
似乎很简单。由于R
是向量化的,因此使用向量的乘法。然后是sum
。
zirconium <- function(x){
n <- 2*seq_along(x) - 1
sum(x * (-1)^((n - 1)/2))
}
sapply(dT[-1], zirconium)
#Sample1 Sample2
# 0.63 2.99
数据。强>
dT <-
structure(list(Condition = structure(1:6, .Label = c("T1", "T2",
"T3", "T4", "T5", "T6"), class = "factor"), Sample1 = c(6.99,
2.05, 4.5, 4.71, 5.66, 9.76), Sample2 = c(5.8, 3.04, 4.69, 5.22,
3.65, 2.89)), .Names = c("Condition", "Sample1", "Sample2"), class = "data.frame", row.names = c(NA,
-6L))