因此,我正在使用 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 中描述的方法。它检查
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