dplyr - 选择列并突变行

时间:2017-06-26 14:37:31

标签: r select dplyr mutate

我有这个小数据框,我想计算方差比仅适用于以" pH"开头的列。但是我一直收到错误或者我的df中没有数据。

这是我的df片段:

structure(list(late3 = c(0.7483625122, 2.06159903455556, 5.51901195, 
8.9179448864, 0.8012341046, 1.50696746144444, 5.7772405045, 7.9769193326
), stat1 = c(0.5979697884, 2.48463623511111, 4.271194605, 9.8042514624, 
0.645918422, 1.90693607733333, 4.163386649, 8.9190734296), stat2 = c(0.5826497438, 
2.41381599011111, 4.215824286, 10.0134923302, 0.6660349276, 1.88416016688889, 
4.17078795966667, 8.8887976216), stat3 = c(0.679208581, 2.42142600066667, 
4.32934937416667, 9.7670053704, 0.6713715604, 1.98269838811111, 
4.22673996316667, 8.6933049124), `pH 5.5 1` = c(0.8633101712, 
2.37037570888889, 5.163553087, 8.6737498488, 0.7951642852, 1.97566951377778, 
5.058281295, 7.0284232742), `pH 5.5 2` = c(0.7494364612, 2.44983807444444, 
5.187655831, 8.6156680094, 0.7246688042, 1.86028079688889, 5.38419989616667, 
7.2673110024), `pH 5.5 3` = c(0.785292152, 2.51608928688889, 
5.25958631366667, 8.3742435552, 0.736008492, 1.86536765022222, 
5.13140668533333, 7.2293598964), `pH 6 1` = c(0.7673117012, 2.41111291655556, 
5.39576283616667, 8.4177696464, 0.8675690952, 1.95317716488889, 
5.4618195255, 7.386733779)), .Names = c("late3", "stat1", "stat2", 
"stat3", "pH 5.5 1", "pH 5.5 2", "pH 5.5 3", "pH 6 1"), class = "data.frame", row.names = c("CL_SHC", 
"PC_SHC", "PE_SHC", "PG_SHC", "CL_WT", "PC_WT", "PE_WT", "PG_WT"
))

当我使用时:

test <- test %>% select(starts_with("pH")) %>% mutate(funs(vmr = var(.)/mean(.)))

我的df中没有任何内容。当我使用mutate_at时出现错误:

Error in check_dot_cols(.vars, .cols) : argument ".vars" is missing, with no default

我希望计算另一列VMR。也许有人知道该怎么做?

最佳, 玛格达

1 个答案:

答案 0 :(得分:2)

如果我们需要根据每行的方差和平均值创建一个列'vmr_h'

library(dplyr)
test %>% 
  select(starts_with("pH")) %>%
  rowwise() %>% 
  do(data.frame(vmr_h = var(unlist(.))/mean(unlist(.)))) %>% 
  bind_cols(test, .)
相关问题