首页 > 解决方案 > 为我的数据框中的单行一次更改多个列值

问题描述

这是我的数据示例

df <- data.frame(ID = c("A", "B", "C", "D", "E", "F"),
                 State = c("StateA", "StateA", NA, "StateB", "StateC", "StateC"),
                 Town = c("Town1", "Town2", NA, "Town4", "Town5", "Town6"),
                 Street = c("StreetX", "StreetY", NA, "StreetQ", "StreetK", "StreetN"))

有没有一种简洁的方法可以为 ID == "C" 的行输入缺失数据?例如 State == "StateB"、Town == "Town3" 和 Street == "StreetZ",对于 ID == "C" 如果我​​必须更改值以进行更多观察,我会使用 mutate() 和case_when() 或 mutate_at() 如下:

df %>%
   mutate(State = ifelse(ID == "C", "StateB", State),
          Town = ifelse(ID == "C", "Town3", Town),
          Street = ifelse(ID == "C", "StreetZ", Street))

但这对于一张唱片来说似乎太麻烦和重复了。我试过这个:

df %>% 
   mutate_at(vars(c("State", "Town", "Street")), ~ifelse(ID == "C", c("StateB", "Town3", "StreetZ"), .)

这显然没有用,否则我不会在这里问怎么做!或者也许某些键/值方法可能有效?

c("State" = "StateB", "Town" = "Town3", "Street" = "StreetZ")

提前致谢!

标签: r

解决方案


您可以使用rows_update为此类任务编写的新函数。

library(dplyr)

row <- tibble(ID = 'C', State = 'StateB', Town = 'Town3', Street = 'StreetZ')
result <- rows_update(df, row, by = 'ID')

#  ID  State  Town  Street
#1  A StateA Town1 StreetX
#2  B StateA Town2 StreetY
#3  C StateB Town3 StreetZ
#4  D StateB Town4 StreetQ
#5  E StateC Town5 StreetK
#6  F StateC Town6 StreetN

推荐阅读