r - 如何编写基于两个数据集(在R中)的另一个变量的相似性来提取变量值的for循环?
问题描述
我有一个数据集,其中仅包含一个变量变量(“文本”)和第二个数据集,该数据集由数据集一中该变量的子集和一个称为“代码”的新变量组成。
dat1<-tibble(text=c("book","chair","banana","cherry"))
dat2<-tibble(text=c("banana","cherry"),code=c(1,NA))
我想要得到的是一个 for 循环,它为每一行 (i) 产生“代码”的值,其中 dat1$text 与 dat2$text 相同,否则为 0。最终目标是一个向量c(0,0,1,NA)
,然后我可以将其添加回第一个数据集。
但是,我不知道如何在 for 循环中选择与 i 相对应的行,这将使我获得到达该向量所需的“代码”值。此外,即使我知道如何提取这些值,我也不确定这一切是否会奏效,更不用说维持我需要的顺序 ( c(0,0,1,NA)
)。
for (i in dat2$text) {
ifelse(i==dat1$text, print(dat[...,2]), print(0))
}
有谁知道如何解决这个问题?
解决方案
我们可以match
text
将两个数据框的列,将NA
匹配替换为 0 或相应的code
值。
inds <- match(dat1$text, dat2$text)
dat1$out <- ifelse(is.na(inds), 0, dat2$code[inds])
dat1
# A tibble: 4 x 2
# text out
# <chr> <dbl>
#1 book 0
#2 chair 0
#3 banana 1
#4 cherry NA
推荐阅读
- github - 自动关闭 Github 问题不起作用
- android - 在“颤振医生”期间颤振崩溃
- javascript - 消息未显示在我的反应原生聊天机器人中
- nlp - 使用预训练的 Bert、Elmo 获得 2 个单词之间的相似度分数
- android - 向 recyclerview 添加可隐藏的 headerview
- docker - Docker compose 中的 Docker args 不会传递到 Dockerfile
- angularjs - 谷歌分析跨域链接器破坏了路径中的 angularjs 标签
- c# - 剑道文本框根据多种状态启用/禁用
- python - how to build a model for computer vision without using pre trained models
- c++ - 如何重用原始输入缓冲区内存?