r - 根据几个条件替换 df 中的某些值
问题描述
基本问题,但我正在寻找一个很好的解决方案(不是循环),如果满足几个条件,则通过 DF2 的值在 DF1 中进行条件替换:
DF1
Name Year Val1
A 2010 x1
A 2012 x2
B 2012 x3
C 2015 x4
C 2012 x5
DF2
Name Year Val1
A 2012 y1
B 2012 y2
C 2012 y3
如果 Year 具有特定值,例如在这种情况下为 2012,并且 DF1 和 DF2 的名称相同,则将 Val1 从 DF2 分配给 DF1。
我尝试了几件事:
DF1$Val1[DF1$Year=="2012"&DF1$Name==DF2$Name,] <-DF2$Val1
DF1$Val1<-replace(DF1$Val1, DF1$Year=="2012" & DF1$Name==DF2$Name, DF2$Val1)
但不幸的是,我收到了一个错误,因为 DF1 和 DF2 的长度不同。
预期的:
DF1
Name Year Val1
A 2010 x1
A 2012 y1
B 2012 y2
C 2015 x4
C 2012 y3
谢谢您的帮助!
解决方案
我们可以使用加入on
列data.table
并更新“Val”
librar(data.table)
setDT(DF1)[DF2, Val1 := i.Val1, on = .(Name, Year)]
DF1
# Name Year Val1
#1: A 2010 x1
#2: A 2012 y1
#3: B 2012 y2
#4: C 2015 x4
#5: C 2012 y3
数据
DF1 <- structure(list(Name = c("A", "A", "B", "C", "C"), Year = c(2010L,
2012L, 2012L, 2015L, 2012L), Val1 = c("x1", "x2", "x3", "x4",
"x5")), class = "data.frame", row.names = c(NA, -5L))
DF2 <- structure(list(Name = c("A", "B", "C"), Year = c(2012L, 2012L,
2012L), Val1 = c("y1", "y2", "y3")), class = "data.frame", row.names = c(NA,
-3L))
推荐阅读
- python - Python + Selenium ActionChain drag_and_drop 在 Chorme + MacOS 上不起作用
- excel - VBA - 将我返回到原始状态的代码(可能将字段类型从“文本”转换为“数字”)
- angular - 使用 Visual Studio 2015 在 .Net 上开发 Angular 7 应用程序
- java - 如何为在java中计算后缀表达式的RPN算法添加一元运算符
- java - A* 搜索算法自定义 f(n)
- javascript - 在javascript中删除二维数组中的给定单元格
- java - Java 8 从输入文件流式创建多个对象
- javascript - Jquery slimjet 事件委托不起作用
- c# - WPF 应用程序无法删除/保存文件
- python - 如何在 python 3.6.4 中为不和谐机器人创建商店?