查看一个数据帧行中的所有值是否存在于另一个数据帧中

nak5120

我有一个数据框如下:

df1    

ColA     ColB     ColC     ColD
  10        A        B        L
  11        N        Q       NA
  12        P        J        L
  43        M        T       NA
  89        O        J        T

df2

ATTR      Att      R1   R2    R3    R4
   1       45       A    B    NA    NA
   2       40       C    D    NA    NA
   3       33       T    J     O    NA
   4       65       L   NA    NA    NA
   5       20       P    L     J    NA
   6       23       Q   NA    NA    NA
   7       38       Q    L    NA    NA

我如何将 df2 与 df1 匹配,以便如果每个 df2 行中的所有值(不考虑顺序)都显示在 df1 行中,那么它将填充。因此,它正在检查每个 df2 行中的所有值是否与每个 df1 行匹配。这种情况下的最终结果应该是这样的:

ColA     ColB     ColC     ColD   ATTR      Att      R1   R2    R3    R4
  10        A        B        L      1       45       A    B    NA    NA
  10        A        B        L      4       65       L   NA    NA    NA
  11        N        Q       NA      6       23       Q   NA    NA    NA
  12        P        J        L      4       65       L   NA    NA    NA
  12        P        J        L      5       20       P    L     J    NA    
  89        O        J        T      3       33       T    J     O    NA

谢谢

索托斯

这是使用基础 R 的可能解决方案。

在继续之前确保一切都是一个字符,即

df[-1] <- lapply(df[-1], as.character)
df1[-c(1:2)] <- lapply(df1[-c(1:2)], as.character)

首先,我们创建两个列表,其中包含每个数据帧的行元素向量。然后我们创建一个矩阵,其中元素的长度l2在 中l1,如果长度为 0,则表示它们匹配。IE,

l1 <- lapply(split(df[-1], seq(nrow(df))), function(i) i[!is.na(i)])
l2 <- lapply(split(df1[-c(1:2)], seq(nrow(df1))), function(i) i[!is.na(i)])

m1 <- sapply(l1, function(i) sapply(l2, function(j) length(setdiff(j, i))))
m1
#  1 2 3 4 5
#1 0 2 2 2 2
#2 2 2 2 2 2
#3 3 3 2 2 0
#4 0 1 0 1 1
#5 2 3 0 3 2
#6 1 0 1 1 1
#7 1 1 1 2 2

然后我们使用该矩阵在原始df. 第一列rpt将指示每行长度为 0 的次数,并将其用作每行的重复次数。我们还使用它来过滤掉所有 0 长度(即与 不匹配的行df1)。扩展数据框后,我们创建另一个变量;ATTR(相同的名称ATTRdf1,以将其用于)mergeIE

df$rpt <- colSums(m1 == 0)
df <- df[df$rpt != 0,]
df <- df[rep(row.names(df), df$rpt),]
df$ATTR <- which(m1 == 0, arr.ind = TRUE)[,1]
df
#    ColA ColB ColC ColD rpt ATTR
#1     10    A    B    L   2    1
#1.1   10    A    B    L   2    4
#2     11    N    Q <NA>   1    6
#3     12    P    J    L   2    4
#3.1   12    P    J    L   2    5
#5     89    O    J    T   1    3

然后我们merge对两个数据帧进行排序,

final_df <- merge(df, df1, by = 'ATTR')

final_df[order(final_df$ColA),]
#  ATTR ColA ColB ColC ColD rpt Att R1   R2   R3   R4
#1    1   10    A    B    L   2  45  A    B <NA> <NA>
#3    4   10    A    B    L   2  65  L <NA> <NA> <NA>
#6    6   11    N    Q <NA>   1  23  Q <NA> <NA> <NA>
#4    4   12    P    J    L   2  65  L <NA> <NA> <NA>
#5    5   12    P    J    L   2  20  P    L    J <NA>
#2    3   89    O    J    T   1  33  T    J    O <NA>

数据

dput(df)
structure(list(ColA = c(10L, 11L, 12L, 43L, 89L), ColB = c("A", 
"N", "P", "M", "O"), ColC = c("B", "Q", "J", "T", "J"), ColD = c("L", 
NA, "L", NA, "T")), .Names = c("ColA", "ColB", "ColC", "ColD"
), row.names = c(NA, -5L), class = "data.frame")

dput(df1)
structure(list(ATTR = 1:7, Att = c(45L, 40L, 33L, 65L, 20L, 23L, 
38L), R1 = c("A", "C", "T", "L", "P", "Q", "Q"), R2 = c("B", 
"D", "J", NA, "L", NA, "L"), R3 = c(NA, NA, "O", NA, "J", NA, 
NA), R4 = c(NA_character_, NA_character_, NA_character_, NA_character_, 
NA_character_, NA_character_, NA_character_)), .Names = c("ATTR", 
"Att", "R1", "R2", "R3", "R4"), row.names = c(NA, -7L), class = "data.frame")

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

检查数据帧中的值是否存在于具有条件的另一个数据帧中

来自分类Dev

根据两个列值是否存在于另一个数据帧中组合两个数据帧

来自分类Dev

如果熊猫数据帧列中的值存在于另一个数据帧中,则更新它们

来自分类Dev

检查一个数据帧中的行是否在另一个数据帧中

来自分类Dev

检查一个数据框中的值是否存在于另一数据框中,打印所有对值

来自分类Dev

计算一个数据帧的每一行与另一个数据帧中的所有其他行之间的欧式距离

来自分类Dev

从另一个数据帧中的一个数据帧中查找所有出现的值的最佳方法是什么?

来自分类Dev

从列中的另一个数据帧返回具有不同值的行

来自分类Dev

如何用除 NA 之外的另一个数据帧替换数据帧中的所有值?

来自分类Dev

如何从另一个数据帧中减去一个数据帧中的所有行?

来自分类Dev

交叉表存在于一个数据库中,而不存在于另一个数据库中

来自分类Dev

检查数组值是否存在于另一个数组中

来自分类Dev

检查数组中的所有元素是否都存在于另一个数组中

来自分类Dev

如何检查一个数据集中的单元格是否存在于另一个数据集中的变量/列中?

来自分类Dev

根据另一个数据帧中的值将数据帧的列相乘

来自分类Dev

过滤一个数据帧的值(如果存在)而在另一个数据帧中不存在

来自分类Dev

检查一个数组中的所有元素是否都存在于另一个数组中

来自分类Dev

将一个熊猫数据帧合并到另一个熊猫数据帧,并从第二个数据帧中删除第一个数据帧中存在的值

来自分类Dev

在另一个数据帧中插入数据帧到行的每个组

来自分类Dev

从与另一个数据帧重叠的数据帧中删除行

来自分类Dev

检查数据帧的每一行是否包含在另一个数据帧中

来自分类Dev

选择其中一个数组字段中的所有值都存在于另一个数组中的文档

来自分类Dev

从另一个数据帧的行值中提取数据帧中的特定行值

来自分类Dev

如何根据值是否存在于另一个数据框中从数据框中删除值?

来自分类Dev

如何检查另一个数据帧中是否不存在字符串值?

来自分类Dev

基于 Python 中另一个数据帧的行值从数据帧中获取列?

来自分类Dev

如何基于R中的另一个数据帧重命名数据帧的所有列?

来自分类Dev

如何基于R中的另一个数据帧重命名数据帧的所有列?

来自分类Dev

检查是否可以在R中的另一个数据帧中找到一个数据帧的值

Related 相关文章

  1. 1

    检查数据帧中的值是否存在于具有条件的另一个数据帧中

  2. 2

    根据两个列值是否存在于另一个数据帧中组合两个数据帧

  3. 3

    如果熊猫数据帧列中的值存在于另一个数据帧中,则更新它们

  4. 4

    检查一个数据帧中的行是否在另一个数据帧中

  5. 5

    检查一个数据框中的值是否存在于另一数据框中,打印所有对值

  6. 6

    计算一个数据帧的每一行与另一个数据帧中的所有其他行之间的欧式距离

  7. 7

    从另一个数据帧中的一个数据帧中查找所有出现的值的最佳方法是什么?

  8. 8

    从列中的另一个数据帧返回具有不同值的行

  9. 9

    如何用除 NA 之外的另一个数据帧替换数据帧中的所有值?

  10. 10

    如何从另一个数据帧中减去一个数据帧中的所有行?

  11. 11

    交叉表存在于一个数据库中,而不存在于另一个数据库中

  12. 12

    检查数组值是否存在于另一个数组中

  13. 13

    检查数组中的所有元素是否都存在于另一个数组中

  14. 14

    如何检查一个数据集中的单元格是否存在于另一个数据集中的变量/列中?

  15. 15

    根据另一个数据帧中的值将数据帧的列相乘

  16. 16

    过滤一个数据帧的值(如果存在)而在另一个数据帧中不存在

  17. 17

    检查一个数组中的所有元素是否都存在于另一个数组中

  18. 18

    将一个熊猫数据帧合并到另一个熊猫数据帧,并从第二个数据帧中删除第一个数据帧中存在的值

  19. 19

    在另一个数据帧中插入数据帧到行的每个组

  20. 20

    从与另一个数据帧重叠的数据帧中删除行

  21. 21

    检查数据帧的每一行是否包含在另一个数据帧中

  22. 22

    选择其中一个数组字段中的所有值都存在于另一个数组中的文档

  23. 23

    从另一个数据帧的行值中提取数据帧中的特定行值

  24. 24

    如何根据值是否存在于另一个数据框中从数据框中删除值?

  25. 25

    如何检查另一个数据帧中是否不存在字符串值?

  26. 26

    基于 Python 中另一个数据帧的行值从数据帧中获取列?

  27. 27

    如何基于R中的另一个数据帧重命名数据帧的所有列?

  28. 28

    如何基于R中的另一个数据帧重命名数据帧的所有列?

  29. 29

    检查是否可以在R中的另一个数据帧中找到一个数据帧的值

热门标签

归档