gpt4 book ai didi

r - 循环浏览列以查找重复/字符组合

转载 作者:行者123 更新时间:2023-12-02 08:25:32 27 4
gpt4 key购买 nike

假设我有以下数据集:

  person       location                     job
1 Joe TX Welder|Welder
2 Bob TX|TX Chef
3 Billy OK|OK|OK Teacher|Teacher
4 Denise MN Unemployed|Unemployed
5 Sasha KS|KS|KS|KS|KS Groomer|Groomer|Groomer

请注意,对于某些人来说,地点和工作有些重复。复制前面有一个“|”性格。

我想遍历所有列(第一列除外),确定哪里有“|” + 重复,最后得到下表:

  person location        job
1 Joe TX Welder
2 Bob TX Chef
3 Billy OK Teacher
4 Denise MN Unemployed
5 Sasha KS Groomer

谢谢!

最佳答案

我们可以使用sub。我们将模式 | 后跟一个或多个字符 (.*) 匹配到字符串的末尾 ($) 并替换为 ''.

sub('\\|.*$', '', m1)
# person location job
#[1,] "Joe" "TX" "Welder"
#[2,] "Bob" "TX" "Chef"
#[3,] "Billy" "OK" "Teacher"
#[4,] "Denise" "MN" "Unemployed"
#[5,] "Sasha" "KS" "Groomer"

编辑:OP 将 matrix 更改为 data.frame。在这种情况下,我们可以使用 dplyr 中的 mutate_each 并在每一列上使用 sub

library(dplyr)
d1 %>%
mutate_each(funs(sub('\\|.*$', '', .)))
# person location job
#1 Joe TX Welder
#2 Bob TX Chef
#3 Billy OK Teacher
#4 Denise MN Unemployed
#5 Sasha KS Groomer

或者我们遍历 'd1' 的列 (lapply(..),使用 sub,并将输出分配回原始数据集以替换值.

d1[] <- lapply(d1, sub, pattern='\\|.*$', replacement='')

数据

m1 <- structure(c("Joe", "Bob", "Billy", "Denise", "Sasha", "TX", 
"TX|TX",
"OK|OK|OK", "MN", "KS|KS|KS|KS|KS", "Welder|Welder", "Chef",
"Teacher|Teacher", "Unemployed|Unemployed", "Groomer|Groomer|Groomer"
), .Dim = c(5L, 3L), .Dimnames = list(NULL, c("person", "location",
"job")))

d1 <- as.data.frame(m1)

关于r - 循环浏览列以查找重复/字符组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32568936/

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