Mam dataframe z 3 kolumnami, z których wszystkie są znakami. Chcę użyć tego dataframe, aby utworzyć formuły, więc muszę upewnić się, że rama danych jest sformatowana, więc mogę wkleić je w równaniach.

Pierwsza kolumna zawiera funkcje statystyczne (np. log10, exp). Druga zawiera zmienną objaśniającą. Trzecia kolumna zawiera informacje o typie modelu i należy jej użyć do określenia, czy należy zastosować następującą funkcję.

Chcę edytować drugą kolumnę, dzięki czemu umieszcza litery z pierwszej kolumny z przodu ciągu. Ale chciałbym tekście w drugiej kolumnie nawiasów. I chciałbym zastosować tę funkcję w niektórych modelach w kolumnie 3RD, które zawierają określone słowo. Więc jakieś przykładowe dane:

Function <- c("exp","log10","exp")
Variable <- c("x","y","z")
Model_type <- c("Model_Yes","Model_Yes","Model_No")
Test <- data.frame(Function,Variable,Model_type)
Test[, ] <- lapply(Test[, ], as.character)

Myślałem na podstawie podobnych pytań, takich jak Jak używać chained ifelse i grepl? że potrzebuję czegoś takiego:

Test$Variable <- ifelse((grepl("No", Test$Model_type)),
                    Test$Variable,
                    paste(Test$Function,Test$Variable))

Ale to nie działa dla "No" model_types, a także nie umieszczaj wsporników wokół oryginalnego łańcucha zmiennego. Oto, co chciałbym być.

Test$Variable <- c("exp(x)","log10(y)","z")

Z góry dziękuję za wszelką pomoc.

0
James White 7 grudzień 2018, 16:00

1 odpowiedź

Najlepsza odpowiedź

Możesz wkleić zmienne razem, używając paste0 i dodając nawiasy opóźniające i wiodące

paste0(Test$Function, "(", Test$Variable, ")")   
#[1] "exp(x)"   "log10(y)" "exp(z)"  

Więc ostatnie polecenie byłoby

Test$Variable <- with(Test, ifelse(grepl("No", Model_type),
                      as.character(Variable), paste0(Function, "(", Variable, ")")))

Test
#  Function Variable Model_type
#1      exp   exp(x)  Model_Yes
#2    log10 log10(y)  Model_Yes
#3      exp        z   Model_No
1
Ronak Shah 7 grudzień 2018, 16:18