【问题标题】:Creating a new dataframe column which returns the position of another column's element as it appears in a given list创建一个新的数据框列,该列返回另一列元素在给定列表中出现的位置
【发布时间】:2021-03-30 13:59:06
【问题描述】:

我有一个清单:

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 New
A Z 1
C Y 3
E X 5
D W 4
B V 2

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

df$New &lt;- ifelse(df$A %in% A_List, grep(df$A, A_List), 0)

【问题讨论】:

  • 刚刚意识到我的示例与我为保持一致性而尝试编辑的代码不一致。

标签: r list dataframe


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    match试试下面的代码

    transform(df, New = match(A,A_List))
    

    【讨论】:

      【解决方案3】:

      data.table 的选项

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-11-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多