我有一个包含四行,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原生的。有人提示吗?谢谢!!
答案 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(.)))