r - 两个数据帧之间的不同单元格
问题描述
我需要两个数据框之间的差异。setdiff() 给了我修改和新的行。但它显示了一个完整的修改行,但我只想要不同的单元格。这个怎么做?我假设列数是相同的。
输入数据:
df1 <- data.frame(ID = c(1, 2, 3),
A = c(1, 2, 3),
B = c(1, 2, NA))
df2 <- data.frame(ID = c(1, 2, 3, 4),
A = c(1, 2, 3, 4),
B = c(1, 2, 3, NA))
newdata = setdiff(df2,df1) # don't give results as my expectation
因此,它应该是这样的数据框:
result <- data.frame(ID = c(3, 4),
A = c(NA, 4),
B = c(3, NA))
列 ID 应保留并始终包含值。
概括:
- 输出应仅包含 df2 中的新行或修改的行。
- 在修改的行中应该只显示修改的或新的单元格。
- ID 列中的值即使没有被修改也应该显示出来。
比较,比较_df?这个怎么做?
解决方案
您可以在单独的步骤中执行此操作,因为您将不同的逻辑应用于不同的列(ID 与 A),但不能作为所有列的集合来实现。
df1 <- data.frame(ID = c(1, 2, 3),
A = c(1, 2, 3),
B = c(1, 2, NA))
df2 <- data.frame(ID = c(1, 2, 3, 4),
A = c(1, 2, 3, 4),
B = c(1, 2, 3, NA))
newdata = setdiff(df2,df1)
newdata
ID A B
1 1 1 1
2 2 2 2
3 3 3 3
4 4 4 NA
您可以将逻辑应用于列 A 和 B,而不是将其应用于 ID,
newdata$A[which(df2$A == df1$A)] <- NA
newdata$B[which(df2$B == df1$B)] <- NA
newdata
ID A B
1 1 NA NA
2 2 NA NA
3 3 NA 3
4 4 4 NA
newdata[3:4,]
有比我好得多的巫师可能会提出意见,但我认为没有办法在 ID 限制的情况下一次性做到这一点。
推荐阅读
- html - 使用 SVG Inject 更改 SCSS 中 SVG 图像的悬停颜色
- vba - 反转字符串中的单个单词
- c++ - 对于数组中的每个元素,我们如何计算右侧大于该元素的元素数量?
- etl - 如何制作仅在工作日运行进程的调度程序?
- python - 使用 Styler (pandas) 为数据框着色后格式化数字
- coq - 编译多个 Coq 文件不起作用
- ios - 关闭颜色选择器视图后的整个视图块
- java - 为什么从 ArrayAdapter 中的 ListView 获取项目时会出错?
- oracle - 当一个表在 Oracle 中有这么多索引时,如何提高插入的性能?
- php - 如何使用引导程序为每个 foreach 制作一列?