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" 的行输入缺失数据?例如 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")
提前致谢!
解决方案
您可以使用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
推荐阅读
- rest - 如何处理微服务架构中的指数调用层次结构?
- image - Fluttes 不更新图像状态
- c++ - 在 Docker 中调试 .NET Core 应用程序 - 附加到非托管代码
- google-apps-script - 谷歌表 onedit 方法会导致脚本崩溃,否则会起作用?
- python - 使用pandas python按组计算字符串中的单词数
- reactjs - Hooks 和 Redux / useEffect 聊天机器人
- django - Django 自定义模型管理器
- html - 如何为 django-google-analytics-app 设置 Django 标签?
- java - 在 for 循环中创建 JTextField 以逐步计算数字的 pow
- python - 无法在 Python 3 和 Jupyter 中导入包