[英]Comparing values in multiple columns in R dataframes & updating missing values
我有3个数据框。 第一个df包含一个列-名称-
df 1
Name
A
B
C
D
E
F
G
H
I
J
K
第二个df包含两列-名称和计数,但是第一个df中可能缺少某些名称。
df 2 -
Name Counts
A 12
B 23
C 34
D 56
E 34
K 44
我想比较从第二个df到第一个df的所有名称,如果没有任何一个名称丢失,那就很好。 如果缺少任何名称,则必须从第三df填充该名称及其计数。 第三个df中将始终具有可用的名称和计数。
df 3 -
Name Counts
A 34
B 45
C 34
D 56
E 67
F 435
G 45
H 76
I 76
J 88
K 90
因此,在上述示例中,由于第二个df中缺少F,G,H,I,J,因此应从df 3中添加其信息。
第二个df应该更新为-
Name Counts
A 12
B 23
C 34
D 56
E 34
F 435
G 45
H 76
I 76
J 88
K 44
任何帮助都会很棒
谢谢
你可以做...
library(data.table)
setDT(DF1); setDT(DF2); setDT(DF3)
DF1[, n := unique(rbind(DF2, DF3), by="Name")[.(.SD$Name), on=.(Name), x.Counts]]
这会向DF1添加一列:
Name n
1: A 12
2: B 23
3: C 34
4: D 56
5: E 34
6: F 435
7: G 45
8: H 76
9: I 76
10: J 88
11: K 44
您可以改为执行merge(DF1, unique(rbind(DF2, DF3), by="Name"), all.x=TRUE)
,尽管那样会创建一个新表,而不是在现有表中添加列。 此合并的dplyr类似物为left_join(DF1, bind_rows(DF2, DF3) %>% distinct(Name))
。
这个怎么运作
DF = rbind(DF2, DF3)
追加两个源表 uDF = unique(DF, by="Name")
保留每个Name
的第一行 DF1[, n := z]
将值为z
列n
添加到DF1
z = x[i, on=, xv]
使用i
查找x
行,然后返回v
列,其中...
x = uDF
v = Counts
i = .SD$Name
是在DF1
找到的i = .SD$Name
的向量 DT[i, j]
j
的.SD
指的是DT
本身,即“数据子集”。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.