我有两个大数据集,并将它们合并在一个uniqueID上:
df3 <- merge(df1, df2, by = "ID", all.x = TRUE)
与df1[df2, on = "ID"]
相同吗?
如何在NAs
的单列中用0
替换df3
? df2
只有两列:value
和ID
。通过具有all.x = TRUE
,在NAs
列中引入了很多value
。我想将它们替换为零,但会不断出错。如何做到这一点?
尝试时看起来是否一样?
答案:否
由于您没有提供示例,所以我会尝试。
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