我有一个由政党及其相应意识形态组成的数据集。其中一些参与方已经更改了名称,但是数据库中没有这些重命名的参与方。我想做的是复制与重命名的政党相对应的行,保持其意识形态价值观不变,但相应更改其名称。
例如。假设我生成以下data.frame:
df <- data.frame(party = c("AB", "PQ", "HL", "AS"), ideology = c("left", "center-right", "right", "right"))
现在假设AB方将其名称更改为RB。我想创建一个名为RB的政党的新行,其意识形态值对应于AB的意识形态值。
我如何以有效的方式做到这一点?在真实的数据集中,我有几个重命名的方。
您可以创建一个包含新旧名称的data.frame
,使用match
提取当前信息,覆盖当事人名称,并使用rbind
将新数据连接到当前。
x <- data.frame(old="AB", new="RB")
y <- df[match(x$old, df$party),]
y$party <- x$new
rbind(df, y)
# party ideology
#1 AB left
#2 PQ center-right
#3 HL right
#4 AS right
#5 RB left
dplyr
解决方案:
library(dplyr)
x <- tibble(old = "AB", new = "RB")
df %>%
filter(party == x$old) %>%
mutate(party = x$new) %>%
bind_rows(df, .)
party ideology
1 AB left
2 PQ center-right
3 HL right
4 AS right
5 RB left
使用rows_upsert
library(dplyr)
df %>%
rows_upsert(tibble(party = "RB", ideology = df$ideology[df$party == 'AB']))
与产出
party ideology
1 AB left
2 PQ center-right
3 HL right
4 AS right
5 RB left