在R中复制一些行,保持一些值不变,改变其他值

vhmi4jdf  于 2023-04-03  发布在  其他
关注(0)|答案(3)|浏览(157)

我有一个由政党及其相应的意识形态组成的数据集。其中一些政党已经更改了名称,但数据库中没有这些重命名的政党。我想做的是复制重命名的政党对应的行,保持其意识形态价值不变,但相应地更改名称。
例如。假设我生成以下data.frame:
df <- data.frame(party = c("AB", "PQ", "HL", "AS"), ideology = c("left", "center-right", "right", "right"))
现在假设AB党改名为RB,我想创建一个新的行,其中一个党名为RB,其意识形态价值与AB的意识形态价值相对应。
我如何以有效的方式做到这一点?在真实的的数据集中,我有几个被重命名的参与方。

vaqhlq81

vaqhlq811#

您可以创建一个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
jslywgbw

jslywgbw2#

下面是一个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
koaltpgm

koaltpgm3#

使用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

相关问题