通过第一行中的值规范化dplyr中的指定列

时间:2019-06-16 19:09:16

标签: r dplyr

我有一个包含四行,23个数字列和一个文本列的数据框。我正在尝试通过减去第一行中的值来归一化所有数字列。

我已经尝试使其与mutate_at一起使用,但是我想不出一种使其正常工作的好方法。

我通过转换为矩阵然后转换为小标题来使其工作:

## First, did some preprocessing to get out the group I want
totalNKFoldChange <- filter(signalingFrame,
                            Population == "Total NK") %>% ungroup

totalNKFoldChange_mat <- select(totalNKFoldChange, signalingCols) %>%
    as.matrix()

normedNKFoldChange <- sweep(totalNKFoldChange_mat,
                            2, totalNKFoldChange_mat[1,])

normedNKFoldChange %<>% cbind(Timepoint = 
                              levels(totalNKFoldChange$Timepoint)) %>% 
    as.tibble %>%
    mutate(Timepoint = factor(Timepoint,
                              levels = levels(totalNKFoldChange$Timepoint)))

我敢肯定,有一种更好的方法是完全dplyr原生的。有人提示吗?谢谢!!

1 个答案:

答案 0 :(得分:1)

如果我们想normalize all the numeric columns by subtracting the value in the first row,请使用mutate_if

library(dplyr)
df1 %>%
     mutate_if(is.numeric, list(~ .- first(.)))