R 如何将两个数据帧组合成一个较大的数据帧,但某些行缺少值(详情如下)
这是一些假设数据。这似乎是一个愚蠢的例子,但我认为它让人明白了这一点。所以我在不同的地方寻找年龄和身高之间的相关性(想想国家或其他什么地方),但我是按性别来区分的。首先,我通过运行Wilcox.test来检查性别之间的年龄是否具有可比性。这是一个假设输出,我添加了一个额外的列,告诉我年龄是否在统计上不存在差异/可比性R 如何将两个数据帧组合成一个较大的数据帧,但某些行缺少值(详情如下),r,R,这是一些假设数据。这似乎是一个愚蠢的例子,但我认为它让人明白了这一点。所以我在不同的地方寻找年龄和身高之间的相关性(想想国家或其他什么地方),但我是按性别来区分的。首先,我通过运行Wilcox.test来检查性别之间的年龄是否具有可比性。这是一个假设输出,我添加了一个额外的列,告诉我年龄是否在统计上不存在差异/可比性 Location Age comparison p value (wilcox.test) Age comparable (p =.05)? A 0.04 n
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.测试,但在这些位置收集数据的男性和女性的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
你能指导我完成这个过程吗?这是我的第一个问题,如果格式不好/不清楚,很抱歉。如果您有任何问题,请随时提问:)
谢谢 正如@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
正如@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
重新格式化,如果您的问题很容易重复,这将很有帮助(因此可以将其复制粘贴到新的R会话中并运行)。请参阅以获取指导。使用
merge()
执行联接。如果要在两个表(联合)中包含所有内容,请使用all=T
,all.x
用于左连接,而all.y
用于右连接。如果公共列名存在,它将自动匹配,在本例中为位置。否则,您可以指定by.x
和by.y
@Mako212。因此,如果我希望在不同的列中显示阳性和阴性的输出(例如,相关输出变量名为“Location A male”),我可以获得与右列(阳性/阴性)中的位置(每个位置都是一行)匹配的p.值吗?我如何指定在变量名中查找是男性相关还是女性相关,并基于此输出到正确的列?如果行名称不匹配(年龄比较名为位置A,而相关性是位置A男性),我如何告诉它匹配它们,因为“位置A”是相同的,所以我希望它在同一行中?重新格式化,如果您的问题很容易重复(因此可以复制粘贴到新的R会话中并运行),这会很有帮助。请参阅以获取指导。使用merge()
执行联接。如果要在两个表(联合)中包含所有内容,请使用all=T
,all.x
用于左连接,而all.y
用于右连接。如果公共列名存在,它将自动匹配,在本例中为位置。否则,您可以指定by.x
和by.y
@Mako212。因此,如果我希望在不同的列中显示阳性和阴性的输出(例如,相关输出变量名为“Location A male”),我可以获得与右列(阳性/阴性)中的位置(每个位置都是一行)匹配的p.值吗?我如何指定在变量名中查找是男性相关还是女性相关,并基于此输出到正确的列?如果行名称不匹配(年龄比较名为位置A,而相关性为位置A男性),我如何告诉它匹配它们,因为“位置A”是相同的,所以我希望它在同一行中?谢谢!这正是我想要的,但在我的例子中,我需要合并2个以上的数据帧(5),因为我不是在做性别,而是在做疾病状态。有没有合并5的方法?Reduce()
提供了一个快速的解决方案,为了获得更大的灵活性,您最好创建一个循环,或者看看是否有一个包提供了合适的解决方案。谢谢!这正是我想要的,但在我的例子中,我需要合并2个以上的数据帧(5),因为我不是在做性别,而是在做疾病状态。有没有合并5的方法?Reduce()
提供了一个快速的解决方案,为了获得更大的灵活性,您最好创建一个循环,或者看看是否有一个包提供了合适的解决方案。