gpt4 book ai didi

r - 如何结合两个不均匀的数据框来创建一个完整的物种矩阵进行分析?

转载 作者:行者123 更新时间:2023-12-01 08:11:52 25 4
gpt4 key购买 nike

我要创建一大 数据框 来自两个较小的数据帧,前三列在每个小数据帧之间是相同的。我还希望两列之间的共享物种落入同一列。

我的数据框(df)1 有 38obs。 40 个变量

我的数据框(df)2 有 30obs。 35 个变量

我想保留两者共同的这些标题(LOGID、DECAY、DIAMETER)。一些物种对两个数据框都是通用的,而另一些物种是其中一个或另一个所独有的。我想在一个新表中出现所有物种。

我是否将 cbind 与某种匹配功能一起使用?或创建虚拟列?我该怎么办?

例如DF1:

LOGID DECAY DIAMETER SP1 SP2 SP3
1 2 20 2 2 3
2 4 22 1 0 7
3 4 12 3 1 2

例如DF2
LOGID DECAY DIAMETER SP1 SP5 SP3 SP7
4 2 25 8 0 2 1
5 4 10 0 0 3 1
6 2 11 1 1 1 1

我希望他们像这样:
LOGID DECAY DIAMETER SP1 SP2 SP3 SP5 SP7
1 2 20 2 2 3 0 0
2 4 22 1 0 7 0 0
3 4 12 3 1 2 0 0
4 2 25 8 0 2 0 1
5 4 10 0 0 3 0 1
6 2 11 1 0 1 1 1

我尝试使用下面建议的代码并最终遇到以下问题,主要是因为我第一次没有指定我想要的内容.....我希望常见的物种属于共享列。
LOGID DECAY DIAMETER SP1x SP2 SP3x SP1y SP5 SP3y SP7
1 2 20 2 2 3 0 0 0 0
2 4 22 1 0 7 0 0 0 0
3 4 12 3 1 2 0 0 0 0
4 2 25 0 0 0 8 0 2 1
5 4 10 0 0 0 0 0 3 1
6 2 11 0 0 0 1 1 1 1

最佳答案

也许(但您被要求在代码中生成一个小示例,以便我们可以在丢弃代码之前进行测试。):

 merge(df1,df2, by=1:3, all=TRUE)

使用您的示例数据,我的建议产生:
> merge(DF1,DF2, by=1:3, all=TRUE)
LOGID DECAY DIAMETER SP1 SP2 SP3 SP4 SP5 SP6 SP7
1 1 2 20 2 2 3 NA NA NA NA
2 2 4 22 1 0 7 NA NA NA NA
3 3 4 12 3 1 2 NA NA NA NA
4 4 2 25 NA NA NA 8 0 2 1
5 5 4 10 NA NA NA 0 0 3 1
6 6 2 11 NA NA NA 1 1 1 1

如果您想将 NA 转换为 0(我认为这不是真的),那么就这样做:
> DF3 <- merge(DF1,DF2, by=1:3, all=TRUE)
> DF3[is.na(DF3)] <- 0
> DF3
LOGID DECAY DIAMETER SP1 SP2 SP3 SP4 SP5 SP6 SP7
1 1 2 20 2 2 3 0 0 0 0
2 2 4 22 1 0 7 0 0 0 0
3 3 4 12 3 1 2 0 0 0 0
4 4 2 25 0 0 0 8 0 2 1
5 5 4 10 0 0 0 0 0 3 1
6 6 2 11 0 0 0 1 1 1 1

如果您在共享列中确实没有任何“重叠”值并且只想“rbind”数据帧,那么有一个 rbind.fill pkg:plyr 中的函数。使用新示例:
library( plyr )
rbind.fill(DF1,DF2)
LOGID DECAY DIAMETER SP1 SP2 SP3 SP5 SP7
1 1 2 20 2 2 3 NA NA
2 2 4 22 1 0 7 NA NA
3 3 4 12 3 1 2 NA NA
4 4 2 25 8 NA 2 0 1
5 5 4 10 0 NA 3 0 1
6 6 2 11 1 NA 1 1 1

关于r - 如何结合两个不均匀的数据框来创建一个完整的物种矩阵进行分析?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26874710/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com