1

我有一个包含四行、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 原生的。有人有提示吗?谢谢!!

4

1 回答 1

2

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

library(dplyr)
df1 %>%
     mutate_if(is.numeric, list(~ .- first(.)))
于 2019-06-16T19:53:43.340 回答