R 如何将两个数据帧组合成一个较大的数据帧,但某些行缺少值(详情如下)

R 如何将两个数据帧组合成一个较大的数据帧,但某些行缺少值(详情如下),r,R,这是一些假设数据。这似乎是一个愚蠢的例子,但我认为它让人明白了这一点。所以我在不同的地方寻找年龄和身高之间的相关性(想想国家或其他什么地方),但我是按性别来区分的。首先,我通过运行Wilcox.test来检查性别之间的年龄是否具有可比性。这是一个假设输出,我添加了一个额外的列,告诉我年龄是否在统计上不存在差异/可比性 Location Age comparison p value (wilcox.test) Age comparable (p =.05)? A 0.04 n

这是一些假设数据。这似乎是一个愚蠢的例子,但我认为它让人明白了这一点。所以我在不同的地方寻找年龄和身高之间的相关性(想想国家或其他什么地方),但我是按性别来区分的。首先,我通过运行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.测试,但在这些位置收集数据的男性和女性的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()
提供了一个快速的解决方案,为了获得更大的灵活性,您最好创建一个循环,或者看看是否有一个包提供了合适的解决方案。