以下是一些假设数据。这可能看起来像一个愚蠢的例子,但我认为它得到了这个想法。因此,我正在寻找不同地点(想想国家或其他)的年龄和身高之间的相关性,但我是按性别分开的。首先,我正在检查以确保性别之间的年龄是可比较的运行Wilcox.test。这是一个假设的输出,我添加了一个额外的列,告诉我年龄是否在统计上不同/可比较。
Location Age comparison p value (wilcox.test) Age comparable (p =.05)?
A 0.04 no
B 0.07 yes
C 0.09 yes
D 0.1 yes
E 0.02 no
F 0.03 no
H 0.78 yes
然后我运行了一个Spearman cor.test,但是对于那些在每个位置收集数据的男性和女性的n是2或更少,所以它不能在某些位置运行,给我一个示例输出:
男性年龄与身高的相关性
Location Correlation p value (cor.test, pearson) Correlation present?
A 0.04 yes
B 0.17 no
H 0.47 no
女性的年龄和身高之间的相关性
Location Correlation p value (cor.test, pearson) Correlation present?
C 0.08 no
D 0.03 yes
E 0.19 no
F 0.17 no
H 0.23 no
现在,我想将这些数据(年龄比较和相关性)合并到一个数据框中,以便于分析数据。这是我想要输出的内容:
Location Age comparison p value (wilcox.test) Age comparable (p =.05)? cor.test p value (male) cor.test p value (female)
A 0.04 no 0.04 yes na na
B 0.07 yes 0.17 no na na
C 0.09 yes na na 0.08 no
D 0.1 yes na na 0.03 yes
E 0.02 no na na 0.19 no
F 0.03 no na na 0.17 no
H 0.78 yes 0.47 no 0.23 no
但是,由于n太小,我不确定如何排列输出,输入必要的na。
请指导我完成这个过程吗?这是我的第一个问题,如果格式不正确/不清楚,请对不起。如果您有任何疑问,请不要犹豫,问:)
谢谢!
答案 0 :(得分:0)
正如@Mako所提到的,你正在寻找的是"加入"或者在R用语中的merge()
。
我冒昧地缩短了列名。
male <- read.table(text="
Location p corr
A 0.04 yes
B 0.17 no
H 0.47 no", header=TRUE)
female <- read.table(text="
Location p corr
C 0.08 no
D 0.03 yes
E 0.19 no
F 0.17 no
H 0.23 no", header=TRUE)
merge(x=male, y=female, by="Location", all=TRUE, suffixes=c("_male", "_female"))
# Location p_male corr_male p_female corr_female
# 1 A 0.04 yes NA <NA>
# 2 B 0.17 no NA <NA>
# 3 H 0.47 no 0.23 no
# 4 C NA <NA> 0.08 no
# 5 D NA <NA> 0.03 yes
# 6 E NA <NA> 0.19 no
# 7 F NA <NA> 0.17 no
对于两个以上的数据框,您可以将Reduce()
与merge()
结合使用。没有使用此方法应用后缀的简洁方法,但默认情况下,列的顺序是与您提供数据帧的顺序相同。
na <- read.table(text="
Location p corr
A 0.07 no
D 0.02 yes
E 0.18 no
F 0.16 no", header=TRUE)
Reduce(function(...) merge(..., by="Location", all=TRUE), list(female, male, na))
# Location p.x corr.x p.y corr.y p corr
# 1 C 0.08 no NA <NA> NA <NA>
# 2 D 0.03 yes NA <NA> 0.02 yes
# 3 E 0.19 no NA <NA> 0.18 no
# 4 F 0.17 no NA <NA> 0.16 no
# 5 H 0.23 no 0.47 no NA <NA>
# 6 A NA <NA> 0.04 yes 0.07 no
# 7 B NA <NA> 0.17 no NA <NA>