Как установить следующий столбец в R - PullRequest
0 голосов
/ 10 октября 2019
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")) 

Если я хочу найти «bob» в этом кадре данных, как мне вернуть столбец рядом с «bob» (только для intro_score), если я не уверен, что здесь присутствует «bob». Скажем, если бы я искал «кен», результат должен быть нулевым. Если бы я искал «Норман», результат должен возвращать result_score.

Я пробовал что-то вроде этого:

name <- "bob"

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

Спасибо за вашу помощь!

Ответы [ 4 ]

1 голос
/ 10 октября 2019

с использованием базы R, если вам нужны имена, которые вы можете сделать:

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

или если вам нужны значения столбцов, вы делаете:

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

intro_score
1   Excellent
2   Excellent
3        Good
0 голосов
/ 10 октября 2019

Вы можете изменить свои данные во время (введение, метод, результат), имя и счет.

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"]
0 голосов
/ 10 октября 2019

Вот один вариант с select_if

library(dplyr)
library(magrittr)
df %>% 
   select_if(~ any(. == "bob")) %>%
   names %>%
   match(., names(df)) %>% 
   add(1) %>% 
   names(df)[.]
#[1] "intro_score"
0 голосов
/ 10 октября 2019
library(purrr)
search_person <- "bob"
colnames(df)[which(map_lgl(df,~all(.x == search_person))) + 1]
"intro_score"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...