data.table合并和删除R中的零

问题描述 投票:-1回答:1

我有两个大数据集,并将它们合并在一个uniqueID上:

df3 <- merge(df1, df2, by = "ID", all.x = TRUE)

df1[df2, on = "ID"]相同吗?

如何在NAs的单列中用0替换df3df2只有两列:valueID。通过具有all.x = TRUE,在NAs列中引入了很多value。我想将它们替换为零,但会不断出错。如何做到这一点?

r data.table na
1个回答
0
投票

尝试时看起来是否一样?

答案:否

由于您没有提供示例,所以我会尝试。

library(data.table) 
df1 <- data.table(ID=2:5,a=1:4)
df2 <- data.table(ID=3:7,b=11:15)
df1
#    ID a
# 1:  2 1
# 2:  3 2
# 3:  4 3
# 4:  5 4

df2
#    ID  b
# 1:  3 11
# 2:  4 12
# 3:  5 13
# 4:  6 14
# 5:  7 15

merge(df1,df2,by="ID",all.x=TRUE)
#    ID a  b
# 1:  2 1 NA
# 2:  3 2 11
# 3:  4 3 12
# 4:  5 4 13

df1[df2,on="ID"]
#    ID  a  b
# 1:  3  2 11
# 2:  4  3 12
# 3:  5  4 13
# 4:  6 NA 14
# 5:  7 NA 15

它们不一样。df1[df2是右连接,保留所有df2。合并具有all.x=TRUE,保留所有df1

与您的merge相同:

df2[df1,on="ID"]
#    ID  b a
# 1:  2 NA 1
# 2:  3 11 2
# 3:  4 12 3
# 4:  5 13 4

这是merge的另一种方式:

merge(df1,df2,by="ID",all.y=TRUE)
#    ID  a  b
# 1:  3  2 11
# 2:  4  3 12
# 3:  5  4 13
# 4:  6 NA 14
# 5:  7 NA 15

然后将NA更改为0

df3 <- df2[df1,on="ID"][is.na(a),a:=0] 
df3
#    ID  b a
# 1:  2  0 1
# 2:  3 11 2
# 3:  4 12 3
# 4:  5 13 4
© www.soinside.com 2019 - 2024. All rights reserved.