给出一个缺少值的数据集,我想为配对比较生成平均值、标准差等.因此,与给定ID不匹配的任何数据行都不应包括在统计数据中.下面是我想要做的一个最小的例子:

library(gtsummary)

D <- tibble(Set = c(rep('A',4), rep('B', 4)),
            ID = c(1, 2, 3, 4, 1, 2, 3, 4),
            V1 = c(NA, 1, 2, 3, 1, 3, 2, 4),
            V2 = c(4, NA, NA, 5, 6, 7, 8, 9))

D |> 
  tbl_summary(
    by = Set, 
    type = list(everything() ~ 'continuous'),
    statistic = all_continuous() ~ "{mean} <{N_nonmiss}>",
    include = -ID,
    missing = 'no') |>
  add_n() |>
  add_p(test = everything() ~ 'paired.t.test',
        group = ID)

which yields the following: enter image description here

这会产生正确的p值,但对于V1,我希望A的平均值为Mean(1,2,3)[It is],而B的平均值为Mean(3,2,4)[相反,它是Mean(1,3,2,4)],因为只应使用ID 2,3,4,因为ID=1没有真正的配对集.对于A和B,N都应该是3.同样,对于V2,我希望A的平均值是Mean(4,5)[它是],而B是Mean(6,9),因为只有ID1和4有成对的值[相反,它是Mean(6,7,8,9)].A和B的N都应为2.

如果这不能在表函数内完成,那么很可能有一种方法将缺失对的实际值也更改为基于ID列的安娜值.这将使数据在表函数中正确工作,但我也没有设法解决这种方法.

推荐答案

这里最好的解决方案是在超过tbl_summary()之前删除不匹配的配对.下面的示例

D <- tibble::tibble(Set = c(rep('A',4), rep('B', 4)),
                    ID = c(1, 2, 3, 4, 1, 2, 3, 4),
                    V1 = c(NA, 1, 2, 3, 1, 3, 2, 4),
                    V2 = c(4, NA, NA, 5, 6, 7, 8, 9))


D |> 
  dplyr::mutate(
    .by = ID,
    # if any values are NA, then make the group NA
    V1 = if (any(is.na(V1))) NA else V1,
    V2 = if (any(is.na(V2))) NA else V2
  ) |> 
  gtsummary::tbl_summary(
    by = Set, 
    type = ~"continuous",
    statistic = ~"{mean} (n={N_nonmiss})",
    include = -ID,
    missing = "no"
  ) |> 
  gtsummary::add_p(test = ~"paired.t.test", group = ID) |> 
  gtsummary::as_kable() # convert to kable to display on SO
Characteristic A, N = 4 B, N = 4 p-value
V1 2.00 (n=3) 3.00 (n=3) 0.2
V2 4.50 (n=2) 7.50 (n=2) 0.2

创建于2024-02-14年第reprex v2.1.0

R相关问答推荐

有没有方法将琴弦完全捕捉到R中的多边形?

在R中列表的结尾添加数字载体

在R中无法读入具有Readxl和lApply的数据集

IMF IFS数据以R表示

以更少间隔的较小表中的聚合离散频率表

矩阵的堆叠条形图,条形图上有数字作为标签

使用R中的dist()迭代ID匹配的欧几里德距离

QY数据的处理:如何定义QY因素的水平

将多个列值转换为二进制

如何移除GGPlot中超出与面相交的任何格网像元

是否有可能从边界中找到一个点值?

在r中整理图例和堆叠图的问题

TidyVerse中长度不等的列结合向量

如果满足条件,则替换列的前一个值和后续值

识别部分重复行,其中一行为NA,其重复行为非NA

我怎么才能把一盘棋变成一盘棋呢?

合并多个数据帧,同时将它们的名称保留为列名?

使用dplyr删除具有条件的行

使用卡环从R中的列中删除单位(&C)

R中的交叉表