Как получить идентификатор, когда персонаж совпадает

#r #dplyr #stringr

Вопрос:

Я получу форму ввода df1, в которой, если имя совпадает с df, мне нужно получить соответствующий идентификатор ex(здоровье означает 2) может ли кто-нибудь помочь мне в этом, как захватить этот идентификатор

 df <- data.frame(id = c(1,2,3,4), B = c('agri','health','edu','energy'))
    
df1 <- data.frame(name = c('agri','health','edu','energy')) 
 

Комментарии:

1. Вы можете использовать match , то есть ? df$id[match('health', df$B)] Это то, что тебе нужно?

2. нет , я получу только один ввод, поэтому мне нужно получить конкретный идентификатор имени, например, если я получу ввод как агри, то мне нужно получить выходной идентификатор 1 @RonakShah

3. Я думаю, что именно это делает мой комментарий. Вместо 'health' вас замените на имя, которое вы получите.

4. на самом деле не знаю, почему он показывал na в моем приложении, есть ли другой способ достичь этого

5. Что вы имеете в виду под «любым другим способом достижения этого»? Разве предлагаемые здесь решения не работают? Если они этого не сделают, пожалуйста, объясните свою проблему, а также желаемый результат немного лучше.

Ответ №1:

Если вас интересуют все матчи:

 df$id[match(df1$name, df$B)]
 

Может быть, вы хотите добавить соответствующий идентификатор в свои df1 данные?

Тогда вы можете сделать:

 df1$new_id <- df$id[match(df1$name, df$B)]
 

что дает:

     name new_id
1   agri      1
2 health      2
3    edu      3
4 energy      4
 

Комментарии:

1. имя, которое находится в df1, должно соответствовать df, тогда мне нужен соответствующий идентификатор, например, в df1 я выбираю agri, тогда он должен дать соответствующий идентификатор 1, который находится в df

2. Подобно тому, что сказал @Ronak Shah в своем комментарии выше, это именно то, что делает функция. Решение Ронака Шаха позволяет вам решить, какому имени вы хотите соответствовать, в то время как мое решение дает вам все совпадения, т. Е. оно сообщает вам, какой идентификатор принадлежит «агри», какой — «здоровью» и так далее.