如何将输入字符串匹配DataFrame中的对应数字ID?
解决方案:从匹配字符串获取对应ID
这其实很简单,咱们可以用几种不同的方法来实现,我给你演示两种常用的方式,适配不同的R使用习惯:
方法1:Base R 原生实现
首先先构造你的数据框(如果已经存在就跳过这一步):
df <- data.frame( ID = c(22, 23, 24), name = c("coffee", "tea", "milk"), stringsAsFactors = FALSE # 避免字符列被自动转成因子,防止匹配出错 )
然后读取用户输入,并匹配对应的ID:
# 获取用户输入 my.string <- readline(prompt="Enter string 1: ") # 通过逻辑索引匹配对应的ID matched_id <- df$ID[df$name == my.string] # 处理匹配结果:有输出ID,无则提示 if(length(matched_id) == 0) { cat("No matching ID found for", my.string, "\n") } else { cat("Matched ID:", matched_id, "\n") }
如果想忽略字符串的大小写(比如用户输入Coffee也能匹配到22),可以稍微修改匹配逻辑:
matched_id <- df$ID[tolower(df$name) == tolower(my.string)]
方法2:用tidyverse/dplyr实现(适合熟悉 tidy 语法的用户)
如果你习惯用dplyr的管道风格,可以这样写:
# 先加载dplyr包(如果没安装先运行 install.packages("dplyr")) library(dplyr) # 构造数据框(同上) df <- data.frame( ID = c(22, 23, 24), name = c("coffee", "tea", "milk"), stringsAsFactors = FALSE ) # 获取用户输入 my.string <- readline(prompt="Enter string 1: ") # 用filter和pull提取ID matched_id <- df %>% filter(name == my.string) %>% pull(ID) # 同样处理结果 if(length(matched_id) == 0) { cat("No matching ID found for", my.string, "\n") } else { cat("Matched ID:", matched_id, "\n") }
两种方法都能实现你要的效果:输入coffee就返回22,输入tea返回23,以此类推。你可以根据自己的代码风格选择合适的方式~
内容的提问来源于stack exchange,提问作者pylearner
相关产品推荐
相关产品推荐

