首页 > 解决方案 > 如何编写基于两个数据集(在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))
}

有谁知道如何解决这个问题?

标签: rfor-loop

解决方案


我们可以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

推荐阅读