Как вернуть значение столбца этого строкового значения, если оно задано в качестве ввода - PullRequest
0 голосов
/ 11 мая 2018

У меня есть нижеприведенный фрейм данных, для которого я должен искать строковые значения и возвращать другие столбцы. Он должен возвращать значения в зависимости от ввода, который я даю

Ex : 
Enter the number you want to search
Input 1 = 14
Inout 2 = 16

Сочетая два выше, я получаю 14,16в виде строки, она должна вернуть мне следующее

rhs        name 
15          salt

Ниже приведен Dataframe, где мы можем искать наши входные данные (он должен искать только по lhs)

DF:

lhs         rhs              name
32,39,6     65          jackfruit
39,6,65     32          coffee
14,16,26    15         salts
16,20,4     26           marshmallows
16,26,33    4            veggies
53          31           candy    

Этот поиск должен принимать любое количество строк и должен иметь возможность поиска.Предположим, мой ввод 14,16,26 должен возвращать значение

rhs name
15  salt

Кроме того, если его всего 16, то он должен возвращать

Rhs      name
15        salts 
26        marshmallows 
4           veggies.

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

КОД:

df[grep('16,20', df$lhs),]

вывод:

rhs   name
    26    marshmallows

Но если изменить мой поиск, как показано ниже,

CODE:

df[grep('16,4', df$lhs),] (#leaving the number 20 )

вышеприведенный код дает мне ошибку.

Ожидаемый результат:

 rhs   name
    26    marshmallows

Ответы [ 2 ]

0 голосов
/ 13 мая 2018
library(rje)
myfun <- function(input){
    result <- apply(rules, 1, function(x){is.subset(input, as.vector(unlist(strsplit(x[2], ','))))})
    result <- rules[result, ]

    return (result)
}
0 голосов
/ 11 мая 2018

Вы можете попробовать это:

df <- read.table(text = "lhs         rhs              name
32,39,6     65          jackfruit
39,6,65     32          coffee
14,16,26    15         salts
16,20,4     26           marshmallows
16,26,33    4            veggies
53          31           candy    ", header = T, stringsAsFactors = F)

# define input values:
input1 <- 14
input2 <- 16

library(dplyr)

# create a data frame in long format for search:
search_df <- unnest(mutate(df, lhs = strsplit(x = lhs, split = "\\D+")))

# now search for names where all inputs are in lhs:
search_df %>% 
  group_by(name) %>% 
  filter(all(c(input1, input2) %in% lhs)) %>% 
  ungroup() %>% 
  distinct(rhs, name)

Редактировать: Если вы хотите больше гибкости в отношении входных данных, просто выберите один:

input <- c(14, 16)
search_df %>% 
  group_by(name) %>% 
  filter(all(input %in% lhs)) %>% 
  ungroup() %>% 
  distinct(rhs, name)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...