是否有一个 R 函数可以检测特定字符串并将其替换为基于字符串中的数字的另一个观察值?

问题描述 投票:0回答:1

因此,我正在使用 1994 年德国选举的选区数据,一些观察结果包含指示该值在不同行中给出的字符串(基于方案“siehe Wkr xxx”-“参见选区 xxx”)。例如,汉堡-阿尔托纳的非就业率仅针对整个汉堡收集,因此汉堡-阿尔托纳选区应采用观察汉堡-米特的值。

example_data <- data.frame(constituency_no = c("001", "002", "003", "004", "005"),
                           constituency_name = c("Hamburg-Mitte", "Hamburg-Altona", "Hamburg-Nord", "Lübeck", "Pinneberg"),
                          nonemployementrate = c(0.04, "siehe Wkr 001", "siehe Wkr 001", 0.03, 0.02))

所以,我想要一个函数,可以自动检测是否存在以“siehe Wkr”开头的字符串,然后将该字符串的值替换为所引用的选区编号中的值。因此,在示例中,我想要一个自动将 nonemployementrate 的值替换为 0.04 的函数,因为汉堡-阿尔托纳和汉堡-北的字符串引用 constituency_no“001”。

result <- data.frame(constituency_no = c("001", "002", "003", "004", "005"),
                           constituency_name = c("Hamburg-Mitte", "Hamburg-Altona", "Hamburg-Nord", "Lübeck", "Pinneberg"),
                          nonemployementrate = c(0.04, 0.04, 0.04, 0.03, 0.02))
r string function replace data-wrangling
1个回答
0
投票

这是一种使用连接执行您在基本 R 中描述的方法。它检查

nonemployementrate
是否以
"siehe Wkr"
开头,如果是,则使用它所引用的选区的
nonemployementrate
。如果没有,它会使用已经存在的
nonemployementrate

example_data |>
    transform(
        join_on = ifelse(
            startsWith(nonemployementrate, "siehe Wkr"),
            gsub("\\D+", "", nonemployementrate),
            constituency_no
        ),
        nonemployementrate = NULL
    ) |>
    merge(
        subset(example_data, select = c("constituency_no", "nonemployementrate")),
        by.x = "join_on",
        by.y = "constituency_no"
    ) |>
    transform(
        join_on = NULL
    )
#   constituency_no constituency_name nonemployementrate
# 1             001     Hamburg-Mitte               0.04
# 2             002    Hamburg-Altona               0.04
# 3             003      Hamburg-Nord               0.04
# 4             004            Lübeck               0.03
# 5             005         Pinneberg               0.02
© www.soinside.com 2019 - 2024. All rights reserved.