在 R 中,我尝试组合列对,以便找到列对之间的最大值。
我的数据框的结构如下:
df <- data.frame(id = c("u1", "u1", "u2", "u2"),
visit = c("v1", "v2", "v1", "v2"),
a1 = c(1, 3, 5, 7),
b1 = c(11, 31, 51, 71),
a2 = c(2, 4, 6, 8),
b2 = c(21, 41, 61, 81))
每个 ID 都有两次访问,他们执行了两组相同的测试和两组不同的测试。我的想法是我可以像这样组合列(顺序无关紧要):
data.frame(id = c("u1", "u1", "u2", "u2", "u1", "u1", "u2", "u2"),
visit = c("v1", "v2", "v1", "v2", "v1", "v2", "v1", "v2"),
a = c(1, 3, 5, 7, 2, 4, 6, 8),
b = c(11, 31, 51, 71, 21, 41, 61, 81))
从那里我可以使用 group_by 找到每次访问的每个 id 的最大值,并根据最大值进行成对 t 检验。
这是我尝试用来将成对的列组合成列的代码。
df_long <- df %>%
pivot_longer(cols = starts_with("a"),
names_to = c("variable"),
values_to = "a") %>%
pivot_longer(cols = starts_with("b"),
names_to = "variable2",
values_to = "b") %>%
select(id, visit, a, b)
pivot_longer
可以很好地组合两列(即,例如仅使用a进行列),但是当我尝试上述操作时,每个值都会显示两次,如果我添加另一个pivot_longer,则每个值都会显示三次。
我知道我可以一次做一个测试,但这会花费相当多的时间,因为我有大量的测试,而且我认为必须有更好的方法来做到这一点。
带有
reshape
的基本 R 选项
reshape(
df,
direction = "long",
idvar = c("id", "visit"),
varying = -(1:2),
v.names = c("a", "b"),
timevar = "group"
)
给予
id visit group a b
u1.v1.1 u1 v1 1 1 11
u1.v2.1 u1 v2 1 3 31
u2.v1.1 u2 v1 1 5 51
u2.v2.1 u2 v2 1 7 71
u1.v1.2 u1 v1 2 2 21
u1.v2.2 u1 v2 2 4 41
u2.v1.2 u2 v1 2 6 61
u2.v2.2 u2 v2 2 8 81