我想知道是否有一种类似于dplyrMutations 连接的方法来连接一个矢量和一个数据帧,而不是两个数据帧.最终,我要实现的是基于数据帧中的键对来转换向量中的值.到目前为止,我想出的方法是:

vec <- c("hi", "hey", "hello")
df <- data.frame(
  start = c("hi", "hello", "hey", "hallo"),
  end = c("bye", "see ya", "adieu", "see you later alligator"))

data.frame(bla = vec) %>% 
  left_join(df, by =c("bla"="start")) %>% 
  magrittr::use_series("end")

正确返回

[1] "bye"  "adieu"  "see ya"

这种方法奏效了,但必须创建一个基于vec的新数据框似乎很愚蠢.我更喜欢直接使用向量.请注意,简单地基于vec过滤df是不够的,因为这不会保持值的相同顺序.

filter(df, start %in% vec) %>% 
  magrittr::use_series("end")

返回错误

[1] "bye" "see ya" "adieu" 

谢谢!

推荐答案

tibble::deframe会将数据框转换为命名向量,您可以使用该向量从vec中查找值:

tibble::deframe(df)[vec]

从文档?deframe

将两列数据框转换为命名的矢量或列表,使用第一列作为名称,使用第二列作为值


在基数R中,这将如下所示:

setNames(df$end, df$start)[vec]

注意:如果您想要一个未命名的向量作为您的输出,只需将两个答案中的任何一个用unname()括起来

或者,您可以只匹配这些值并使用这些索引来获得新值:

df$end[match(vec, df$start)]

R相关问答推荐

创建计数(带重置)变量

插入指示行之间时间间隔的新行

导入到固定列宽的R中时出现问题

geom_Ribbon条件填充创建与数据不匹配的形状(ggplot 2 r)

为什么当我try 在收件箱中使用合并功能时会出现回收错误?

更改绘图上的x轴断点,而不影响风险?

如何修复R码的置换部分?

Highcharter多次钻取不起作用,使用不同方法

如何使用按钮切换轨迹?

在R中将特定列的值向右移动

单个轮廓重叠条的单独图例

Ggplot2中的重复注记

如何计算多个日期是否在一个日期范围内

如何在ggplot图中找到第二轴的比例

从一个列表的框架中移除列表包装器

使用rvest从多个页面抓取时避免404错误

您是否可以折叠R中的重复行,同时保留基于所选列的值?

如何在PackageStatus()中列出&q;不可用的包&q;?

函数可以跨多个列搜索多个字符串并创建二进制输出变量

在R中使用列表(作为tibble列)进行向量化?