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

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

我有一个由政党及其相应的意识形态组成的数据集。其中一些政党已经更改了他们的名字,但数据库中没有这些更名的政党。我想要做的是复制与重命名的政党相对应的行,保持其意识形态价值观不变,但相应地改变他们的名字。

例如。假设我生成以下 data.frame:

df <- data.frame(party = c("AB", "PQ", "HL", "AS"), ideology = c("left", "center-right", "right", "right"))

现在假设AB方改名为RB。我想用一个名为 RB 的政党及其意识形态值与 AB 的意识形态值相对应来创建一个新行。

我如何有效地做到这一点?在真实的数据集中,我有几个派对被重命名了。

r row
3个回答
1
投票

您可以创建一个包含旧名称和新名称的

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

0
投票

这是一个

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

0
投票

使用

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
© www.soinside.com 2019 - 2024. All rights reserved.