我有一个清单:
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)
答案 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)]