gpt4 book ai didi

r - 在 R 中,如何匹配来自 2 个不同列的值的前 3 个字符

转载 作者:行者123 更新时间:2023-12-05 00:10:52 25 4
gpt4 key购买 nike

ColA   ColB

D41 D410
D56 D411
D561 D412
D58 D60
D600 D70

在 R 中,如何获取 所在的值2 个不同列的前 3 个字符匹配? 在上面的例子中,这意味着 D41、D410、D411、D412、D600 和 D60 是匹配结果。

是否可以结合使用 gsub 和 dplyr 的过滤功能?

最佳答案

我们可以使用 substr根据位置获取子字符串,然后进行比较( == - 如果我们需要按元素进行比较)

substr(df1$ColA, 1, 3) == substr(df1$ColB, 1, 3)

或使用 %in%用于进行整列比较
v1 <- c(df1$ColA[substr(df1$ColA, 1, 3) %in% substr(df1$ColB, 1, 3)],
df1$ColB[substr(df1$ColB, 1, 3) %in% substr(df1$ColA, 1, 3)])
unique(v1)
#[1] "D41" "D600" "D410" "D411" "D412" "D60"

或使用 tidyverse
library(tidyverse)
list(df1, df1[2:1]) %>%
map( ~ .x %>%
reduce(., ~
keep(.x, substr(.x, 1, 3) %in% substr(.y, 1, 3)))) %>%
flatten_chr
#[1] "D41" "D600" "D410" "D411" "D412" "D60"

或使用
Reduce(`==`, lapply(df1, substr, 1, 3))

数据
df1 <- structure(list(ColA = c("D41", "D56", "D561", "D58", "D600"), 
ColB = c("D410", "D411", "D412", "D60", "D70")), class = "data.frame",
row.names = c(NA, -5L))

关于r - 在 R 中,如何匹配来自 2 个不同列的值的前 3 个字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55962909/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com