一次为数据框架中的单行更改多个列值

  • 本文关键字:单行更 框架 一次 数据 r
  • 更新时间 :
  • 英文 :


这是我的数据的一个例子

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"的行缺失的数据?例如,对于ID == "C", State == "StateB", Town == "Town3", Street == "StreetZ"如果我必须为更多的观察值更改值,我会使用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")

提前感谢!

您可以使用为这些任务编写的新的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

最新更新