首页 > 解决方案 > 创建一个新的数据框列,该列返回另一列元素在给定列表中出现的位置

问题描述

我有一个清单:

A_List <- (A, B, C, D, E)

我有一个df:

A <- c(A, C, E, D, B) 
B <- (Z, Y, X, W, V)

我想创建一个“新”列,其值是通过查看“A”列中的每个元素并返回该元素在列表 A 中出现的索引来派生的。

一个 新的
一个 Z 1
C 3
X 5
D W 4
2

我曾尝试将 ifelse() 与 grep 一起使用,但它只需要第一个元素:

df$New <- ifelse(df$A %in% A_List, grep(df$A, A_List), 0)

标签: rlistdataframe

解决方案


baseR方法

df$New <- match(df$A, A_list)

dplyr方法

library(dplyr)
A <- c("A", "C", "E", "D", "B")
B <- c("Z", "Y", "X", "W", "V")
df <- data.frame(A, B)
A_list = LETTERS[1:5]

df %>% mutate(New = match(A, A_list))
  A B New
1 A Z   1
2 C Y   3
3 E X   5
4 D W   4
5 B V   2


推荐阅读