【发布时间】:2015-06-14 23:23:09
【问题描述】:
我希望使用每个数据子组独有的计算值填充一个新的数据框列。这是我的确切代码:
df <- read.csv('data_30_Mar2015.csv')
df$dCT <- NA
#FUNCTION
calc_dCT <- function(sample, DF){
sample_df <- DF[ which(DF$Sample=='sample'),]
print (sample_df)
VIC <- sample_df[ which(sample_df$Reporter=='VIC'),]
FAM <- sample_df[ which(sample_df$Reporter=='FAM'),]
VIC_mean<-mean(VIC[,3])
FAM_mean<-mean(FAM[,3])
DCT <- FAM_mean - VIC_mean
for (i in 1:length(sample_df)){
sample_df[i,4] <- DCT
}
DF<-merge(DF, sample_df, all=TRUE)
}
#CALLS TO FUNCTION
calc_dCT('c48', df)
calc_dCT('m48', df)
calc_dCT('c72', df)
calc_dCT('m72', df)
print (df)
这是输出:
calc_dCT('c48', df)
[1] Sample Reporter CT dCT
<0 rows> (or 0-length row.names)
calc_dCT('m48', df)
[1] Sample Reporter CT dCT
<0 rows> (or 0-length row.names)
calc_dCT('c72', df)
[1] Sample Reporter CT dCT
<0 rows> (or 0-length row.names)
calc_dCT('m72', df)
[1] Sample Reporter CT dCT
<0 rows> (or 0-length row.names)
print (df)
Sample Reporter CT dCT
1 m48 VIC 27.50595 NA
2 m48 VIC 27.77835 NA
3 m48 VIC 27.62321 NA
4 m48 FAM 30.87295 NA
5 m48 FAM 30.87967 NA
6 m48 FAM 30.73427 NA
7 c48 VIC 26.56715 NA
8 c48 VIC 26.89787 NA
9 c48 VIC 26.82587 NA
10 c48 FAM 30.20642 NA
11 c48 FAM 30.43074 NA
12 c48 FAM 30.36933 NA
13 m72 VIC 29.61585 NA
14 m72 VIC 28.65742 NA
15 m72 VIC 29.40057 NA
16 m72 FAM 32.27304 NA
17 m72 FAM 32.38696 NA
18 m72 FAM 32.24386 NA
19 c72 VIC 28.22370 NA
20 c72 VIC 28.17342 NA
21 c72 VIC 28.49104 NA
22 c72 FAM 31.91751 NA
23 c72 FAM 31.67524 NA
24 c72 FAM 31.87287 NA
它似乎没有正确地对数据进行子集化,我不确定为什么会这样。我正在尝试使用 DCT 的计算值填充“dCT”列。
【问题讨论】:
-
您能用文字解释一下您要达到的目标吗?什么是 DCT?为什么你运行
DF$Sample=='sample'而DF$Sample中没有值等于sample?你想要的输出到底是什么? -
如果您查看 df,例如在示例“m48”中:DCT = FAM 的平均值 - VIC 的平均值。我希望将这个平均值添加到“m48”的每一行。然后我想对“c48”等重复该过程。DF$Sample== sample,其中 sample 是提供给函数的变量,感谢您发现“sample”,它应该只是没有语音标记的样本。但仍然没有计算 VIC 的平均值 - FAM 的平均值并附加到 df。
-
请记住始终发布可复制粘贴的数据,例如使用 dput 或类似的东西。见stackoverflow.com/questions/5963269/…