创建一个新的数据框列,该列返回另一列元素在给定列表中的位置

时间:2021-03-30 13:59:06

标签: r list dataframe

我有一个清单:

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

我有一个 df:

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

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

<头>
A B
A Z 1
C 3
E X 5
D W 4
B V 2

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

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

3 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:2)

match

试试下面的代码
transform(df, New = match(A,A_List))

答案 2 :(得分:1)

带有 data.table 的选项

library(data.table)
setDT(df)[, New := match(A, A_list)]
相关问题