我有一个由政党及其相应的意识形态组成的数据集。其中一些政党已经更改了他们的名字,但数据库中没有这些更名的政党。我想要做的是复制与重命名的政党相对应的行,保持其意识形态价值观不变,但相应地改变他们的名字。
例如。假设我生成以下 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