2017-06-26 8 views
1

Ich habe diesen kleinen Datenrahmen und ich möchte Varianz zu mittlerem Verhältnis nur für Spalten berechnen, die mit "pH" beginnt. Allerdings bekomme ich immer einen Fehler oder es sind keine Daten in meinem df. dplyr - Spalte auswählen und mutieren zeilenweise

Dies ist ein Fragment meiner df:

structure(list(late3 = c(0.7483625122, 2.06159903455556, 5.51901195, 
8.9179448864, 0.8, 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" 
)) 

Wenn ich verwende:

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

Nichts in meinem df erscheinen. Als ich mutate_at verwende habe ich einen Fehler:

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

Ich mag wäre eine weitere Spalte mit VMR berechnet haben. Vielleicht hat jemand eine Idee, wie es geht?

Best, Magda

Antwort

2

Wenn wir auf die Varianz eine Spalte ‚vmr_h‘ basierend erstellen müssen und jeder Zeile bedeuten

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

danke für die Antwort! Es funktioniert, aber was ich brauche, ist eine zusätzliche Spalte im Testdatenframe namens "vmr_ph", wo ich das Varianzmittelverhältnis für jede Zeile berechnet habe. Weißt du, wie man es macht? – magruc

+0

@magruc Bitte überprüfen Sie die aktualisierte Antwort – akrun

Verwandte Themen