gpt4 book ai didi

r - 在给定一个条件的情况下更改多列中的值(最好在 dplyr 中)

转载 作者:行者123 更新时间:2023-12-05 04:19:44 26 4
gpt4 key购买 nike

我正在寻找一种简单的方法来更改同一个人的多个值。最好使用 dplyr 或 tidyverse 的任何其他软件包。

这里是我的例子:

df <- data.frame(personid = 1:3, class = c("class1", "class3", "class3"), classlevel = c(1, 11, 3), education = c("BA", "Msc", "BA"))
df

我的数据集包含一个有几个错误的条目。人 #2 应该是类(class) 1 的一部分,在类(class) 1,他的教育是文学学士,而不是理学硕士。我经常将 mutate 与 case_when 结合使用,但在我的例子中,我不想更改具有多个条件的一个变量,我有一个条件并希望根据此条件更改其他变量中的多个值。

基本上,我正在寻找一个更短的代码来替换它:

df$class[df$personid == 2] <- "class1"
df$classlevel[df$personid == 2] <- 1
df$education[df$personid == 2] <- "BA"
df

或者这个:

library(tidyverse)
df <- df |>
mutate(class = case_when(personid == 2 ~ "class1", TRUE ~ class)) |>
mutate(classlevel = case_when(personid == 2 ~ 1, TRUE ~ as.numeric(classlevel))) |>
mutate(education = case_when(personid == 2 ~ "BA", TRUE ~ education))
df

在我的原始数据中,有几十个这样的案例,每个人用三行代码,我觉得有点乏味。有没有更短的路?

感谢您的意见!

最佳答案

一种方法是创建要更新的值的数据框并使用 rows_update()。请注意,这假定行是唯一标识的。

library(dplyr)

df_update <- tribble(
~personid, ~class, ~classlevel, ~education,
1, "class1", 1, "BA"
)

df %>%
rows_update(df_update, by = "personid")

personid class classlevel education
1 1 class1 1 BA
2 2 class1 1 BA
3 3 class3 3 BA

关于r - 在给定一个条件的情况下更改多列中的值(最好在 dplyr 中),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74726623/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com