Jak podmnožinu další sloupec do výzkumu

hlasů
0
df <- data.frame(intro = c(bob,bob,bob),
           intro_score = c(Excellent,Excellent,Good),
           method = c(sally,sally,sally),
           method_score = c(Excellent,Excellent,Excellent),
           result = c(Norman,Norman,Norman),
           result_score = c(Good,Good,Good)) 

Chci-li hledat „Bob“ v tomto datovém rámci, jak se mohu vrátit sloupec vedle „Bob“ (intro_score jediný), za předpokladu, že si nejsem jistý, jestli „bob“ je tady. Řekněme, že kdybych se podívat na „ken“, výsledek by měl být nulový. Pokud bych měl hledat „Norman“, výsledek by měl vrátit result_score.

Snažil jsem se něco takového:

name <- bob

df_name <- df %>%
  if (str_detect(intro, name)) {
    select((which(colnames==str_detect(intro, name)))+1)
  } else {}

Děkuji za vaší pomoc!

Položena 10/10/2019 v 00:37
zdroj uživatelem
V jiných jazycích...                            


4 odpovědí

hlasů
1

použitím základní výzkum, pokud budete potřebovat názvy můžete udělat:

names(df[unique(which(df=="bob",TRUE)[,2]+1)])
[1] "intro_score"

nebo pokud budete potřebovat hodnoty sloupců, vy:

df[unique(which(df=="bob",TRUE)[,2]+1)]

intro_score
1   Excellent
2   Excellent
3        Good
Odpovězeno 10/10/2019 v 01:13
zdroj uživatelem

hlasů
0

Dalo by se přetvořit data v čase (intro, metoda, výsledek), název a skóre.

df2 <- reshape(df, direction = "long", varying = list(c(1,3,5), c(2,4,6)), v.names = c("name", "score"), times = c("intro", "method", "result"))    
df2[df2$name == "Norman", "score"]
Odpovězeno 10/10/2019 v 01:19
zdroj uživatelem

hlasů
0

Zde je jedna možnost se select_if

library(dplyr)
library(magrittr)
df %>% 
   select_if(~ any(. == "bob")) %>%
   names %>%
   match(., names(df)) %>% 
   add(1) %>% 
   names(df)[.]
#[1] "intro_score"
Odpovězeno 10/10/2019 v 01:13
zdroj uživatelem

hlasů
0
library(purrr)
search_person <- "bob"
colnames(df)[which(map_lgl(df,~all(.x == search_person))) + 1]
"intro_score"
Odpovězeno 10/10/2019 v 00:52
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more