【问题标题】:Binding two data frames and removing same row numbers in R [duplicate]绑定两个数据帧并删除R中的相同行号[重复]
【发布时间】:2020-09-16 19:23:19
【问题描述】:

我有两个行数相同 (639) 但列长不同 (DF1: 5, DF2: 2500) 的数据帧,DF1 中的行对应 DF2 中的行。

DF2 中的某些行将由于多个NAs 而被删除,但我没有关于哪些行被删除的信息。 cbind() 不允许我将 DF 绑定在一起,因为现在行长不同。但是,我还需要对应的行,因此如果在 DF2 中删除了第 47 行,则在合并时也必须在 DF1 中删除它。我的假设是row.names 可以有一些解决方法,但我不确定如何执行它。帮助将不胜感激。以下 DF 示例:

DF1:

    pp trialNo  item trialTarget trial
1 pp01       1  M012      script     1
2 pp01       2 BS016      script     2
3 pp01       3  M007      script     3
4 pp01       4 BS010      script     4
5 pp01       5  M006      script     5
6 pp01       6 BS018      script     6 

DF2:

    V1  V2  V3  V4  V5  V6
1: 764 764 763 763 762 763
2: 714 714 711 708 705 704
3: 872 871 869 867 867 871
4: 730 728 727 724 722 719
5: 789 786 788 790 792 790
6: 922 923 928 933 938 938

假设删除了 DF2 中的第 3 行,我希望在绑定后会这样:

    pp trialNo  item trialTarget trial  V1  V2  V3  V4  V5  V6
1 pp01       1  M012      script     1 764 764 763 763 762 763
2 pp01       2 BS016      script     2 714 714 711 708 705 704
4 pp01       4 BS010      script     4 730 728 727 724 722 719
5 pp01       5  M006      script     5 789 786 788 790 792 790
6 pp01       6 BS018      script     6 922 923 928 933 938 938

提前致谢。

【问题讨论】:

  • dplyr::inner_join 怎么样?

标签: r dataframe merge cbind


【解决方案1】:

您可以在每个数据框中创建一个行索引。

df1$row <- 1:nrow(df1)
df2$row <- 1:nrow(df2)

然后删除df2 中的第三行。

df2 <- df2[-3, ]

然后您可以 merge by row 列两个数据框。

merge(df1, df2, by = 'row')

#  row   pp trialNo  item trialTarget trial  V1  V2  V3  V4  V5  V6
#1   1 pp01       1  M012      script     1 764 764 763 763 762 763
#2   2 pp01       2 BS016      script     2 714 714 711 708 705 704
#3   4 pp01       4 BS010      script     4 730 728 727 724 722 719
#4   5 pp01       5  M006      script     5 789 786 788 790 792 790
#5   6 pp01       6 BS018      script     6 922 923 928 933 938 938

数据

df1 <- structure(list(pp = c("pp01", "pp01", "pp01", "pp01", "pp01", 
"pp01"), trialNo = 1:6, item = c("M012", "BS016", "M007", "BS010", 
"M006", "BS018"), trialTarget = c("script", "script", "script", 
"script", "script", "script"), trial = 1:6, row = 1:6), row.names = c(NA, 
-6L), class = "data.frame")

df2 <- structure(list(V1 = c(764L, 714L, 872L, 730L, 789L, 922L), V2 = c(764L, 
714L, 871L, 728L, 786L, 923L), V3 = c(763L, 711L, 869L, 727L, 
788L, 928L), V4 = c(763L, 708L, 867L, 724L, 790L, 933L), V5 = c(762L, 
705L, 867L, 722L, 792L, 938L), V6 = c(763L, 704L, 871L, 719L, 
790L, 938L)), class = "data.frame", row.names = c(NA, -6L))

【讨论】:

  • 感谢您的回复罗纳克。我通过添加以下事实澄清了我的问题:我不知道在 DF2 中删除了哪些行。我以第 3 行为例,但实际上,639 行中有几行被删除了。
  • 您不能通过添加行索引来修改这两个数据框,就像我在删除行之前添加的那样?
  • 我在清理过程中将行索引添加到错误的数据框中,您的解决方案对我有用。在清理过程中删除了 8 行,合并后的数据框现在有 631 行,对应正确。谢谢!
猜你喜欢
  • 1970-01-01
  • 2017-02-23
  • 1970-01-01
  • 2020-06-25
  • 2018-06-09
  • 1970-01-01
  • 2023-02-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多