#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 в своем комментарии выше, это именно то, что делает функция. Решение Ронака Шаха позволяет вам решить, какому имени вы хотите соответствовать, в то время как мое решение дает вам все совпадения, т. Е. оно сообщает вам, какой идентификатор принадлежит «агри», какой — «здоровью» и так далее.