【发布时间】:2019-02-12 03:20:48
【问题描述】:
我是 r 的新手,并且有一组复杂的数据,所以希望我的解释是正确的。我需要使用多个数据框来执行一系列操作。这是一个例子。我有三个数据框。一个是物种名称和对应代码的列表:
>df.sp
Species Code
Picea PI
Pinus CA
另一个是包含不同位置 (dir) 物种丰度数据的站点列表。不幸的是,物种的顺序是不同的。
>df.site
Site dir total t01 t02 t03 t04
2 Total PI CA AB T
2 N 9 1 5 na na
2 AB ZI PI CA
2 S 5 2 2 1 4
3 DD EE AB YT
3 N 6 1 1 5 3
3 AB YT EE DD
3 S 5 4 3 1 1
那我还有一个对应物种的性状数据框:
>df.trait
Species leaft rootl
Picea 0.01 1.2
Pinus 0.02 3.5
我想做的一件事是获取每个站点 (df.site$Site) 和每个站点位置的所有物种的每个特征 (df.trait$left 和 df.trait$rootl) 的平均值(df.site$ 站点 N,S)。所以结果将是第一行:
Site dir leaft rootl
2 N 0.015 2.35
我希望这是有道理的。思考如何去做对我来说非常复杂。我曾尝试从this post 和this(以及许多其他人)工作,但迷路了。 谢谢您的帮助。真的很感激。
更新:这里是使用 dput 的实际 df.site(减少)示例:
> dput(head(df.site))
structure(list(Site = c(2L, 2L, 2L, 2L, 2L, 2L), dir = c("rep17316",
"N", "", "S", "", "SE"), total = c("Total", "9", "",
"10", "", "9"), t01 = c("PI", "4", "CA", "1", "SILLAC",
"3"), t02 = c("CXBLAN", "3", "ZIZAUR", "4", "OENPIL", "2"),
t03 = c("ZIZAPT", "1", "ECHPUR", "2", "ASCSYR", "2")), .Names = c("site", "dir", "total", "t01", "t02", "t03"), row.names = 2:7, class = "data.frame")
【问题讨论】:
-
df.site在列的类型不一致的情况下看起来非常糟糕(例如,total列有像Total这样的词和像9这样的数字,@ 987654333@ 列有像"T"这样的词(除非这是一个布尔值 TRUE?),像"na"这样的字符串可能应该缺少值NA,像4这样的数字和像"CA"这样的常规字符串。第一步将肯定需要使数据成形。您能否与dput共享该数据框的一个子集,以便它可以复制/粘贴并且我们可以看到所有列类型?(与dput()共享其他数据也很好...) -
如果您需要帮助制作可重现的示例,请参阅this excellent FAQ。
dput(droplevels(df.site[1:10, ]))应该不错。 -
然而,一个更好的问题可能是返回到您导入的
df.site并修复导入过程,而不是尝试修复导致的混乱数据......没有看到样本很难知道这是否会减少工作量。 -
谢谢。是的,df.site 是一场噩梦,这是问题的一部分。它已正确导入,只是一个难以处理的 csv 文件。我按照建议使用 dput 添加了简化版本。
-
与 R 无关,但您的示例
Species列是否更适合命名为genus? :)
标签: r loops merge lookup-tables