R中数据帧的特定行的规范化

时间:2018-06-06 15:52:45

标签: r dataframe normalization

我有一个包含许多列和行的数据框。我想做以下事情:

  • 在“id”
  • 列中删除所有不包含“phos”文本的行
  • 使用文本“int_sam”
  • 对所有强度列上的这些行进行标准化(例如,中位数居中)
  • 使用上面计算的归一化因子/值,然后在包含的每一行上减去(数据是log2变换的) 列“id”中的文本“phos”,以列式(样本方式)方式。

非常感谢您提前。 我在R方面没有多少经验,我也不是统计学家。因此,使用R代码进行简单的解释将非常有帮助。 再次感谢。

try-catch

1 个答案:

答案 0 :(得分:0)

尝试以下

您的数据

int_sam_1 = c(2421432, 24242424, NA, 4684757849, NA, 10485040, NA, 
              6849400, 40300, NA, NA, NA, 556456466, 4646456466, 246464266, 4564242646)
int_sam_2 = c(NA, 5342353, 14532556, 43566, 46367367, 768769769, 797899, NA, NA, NA, 
              686899, 7898979, 678568, NA, 68886, 488)
int_sam_3 = c(11351, NA, NA, NA, 1354151345, 1351351354, 314534, 1535, 3145354, 4353455, 
              324535, 3543445, 34535, 34535534, NA, NA)
id = c("phos", "acet phos", "acet", "acet", "acet", "acet meth phos", "phos", "phos", "phos", "phos", "acet", 
       "meth", "meth phos", "phos", "meth phos", "phos")
df = cbind.data.frame(int_sam_1, int_sam_2, int_sam_3, id)

对没有phos的列进行子集化并计算全局中值

df.sub <- df %>% filter(!grepl("phos",id))
df.median <- median(as.vector(as.matrix(df.sub[,1:3])),na.rm = T)

从列1-3中的每个值中减去golbal中位数,其中有phos

df <- df %>% 
mutate(int_sam_1=ifelse(grepl('phos',id),int_sam_1-df.median, int_sam_1)) %>% 
mutate(int_sam_2=ifelse(grepl('phos',id),int_sam_2-df.median, int_sam_2)) %>%
mutate(int_sam_3=ifelse(grepl('phos',id),int_sam_3-df.median, int_sam_3))