【发布时间】:2014-03-22 15:00:51
【问题描述】:
我有一个这样的 df:
> dat
gen M1 M1 M1 M1 M2 M2 M2
G1 150 142 130 105 96
G2 150 145 142 130 96 89
G3 150 145 130 105 96
G4 145 142 130 105 89
G5 150 142 130 105 96
G6 145 142 130 96 89
G7 150 142 105 96
G8 150 145 130 105 89
G9 150 145 142 96 89
在这里,数据存在于重复的 id 中。我喜欢这样总结:
>dat1
gen M1 M1 M1 M1 agg M2 M2 M2 agg
G1 150 142 130 150/142/130 105 96 105/96
G2 150 145 142 130 150/145/142/130 96 89 96/89
G3 150 145 130 150/145/130 105 96 105/96
G4 145 142 130 145/142/430 105 89 105/89
G5 150 142 130 150/142/130 105 96 105/96
G6 145 142 130 145/142/130 96 89 96/89
G7 150 142 150/142 105 96 105/96
G8 150 145 130 150/145/130 105 89 105/89
G9 150 145 142 150/145/142 96 89 96/89
在这里,在 agg 列中,我根据重复的第一行聚合了所有值。
我喜欢在重复列的末尾创建新列并聚合它。
如何在R中做到这一点。我很困惑
EDIT:
dput(dat)
structure(list(V1 = structure(c(10L, 1L, 2L, 3L, 4L, 5L, 6L,
7L, 8L, 9L), .Label = c("G1", "G2", "G3", "G4", "G5", "G6", "G7",
"G8", "G9", "gen"), class = "factor"), V2 = structure(c(2L, 1L,
1L, 1L, NA, 1L, NA, 1L, 1L, 1L), .Label = c("150", "M1"), class = "factor"),
V3 = structure(c(2L, NA, 1L, 1L, 1L, NA, 1L, NA, 1L, 1L), .Label = c("145",
"M1"), class = "factor"), V4 = structure(c(2L, 1L, 1L, NA,
1L, 1L, 1L, 1L, NA, 1L), .Label = c("142", "M1"), class = "factor"),
V5 = structure(c(2L, 1L, 1L, 1L, 1L, 1L, 1L, NA, 1L, NA), .Label = c("130",
"M1"), class = "factor"), V6 = structure(c(2L, 1L, NA, 1L,
1L, 1L, NA, 1L, 1L, NA), .Label = c("105", "M2"), class = "factor"),
V7 = structure(c(2L, 1L, 1L, 1L, NA, 1L, 1L, 1L, NA, 1L), .Label = c("96",
"M2"), class = "factor"), V8 = structure(c(2L, NA, 1L, NA,
1L, NA, 1L, NA, 1L, 1L), .Label = c("89", "M2"), class = "factor")), .Names = c("V1",
"V2", "V3", "V4", "V5", "V6", "V7", "V8"), class = "data.frame", row.names = c(NA,
-10L))
【问题讨论】:
-
你的
dput(...)很奇怪。它将标题放在第一行,列名称为V1, V2,...。这不是您所质疑的dat的结构。 -
我不知道你的数据是怎么变成这样的,但这可能不是故意的。我可以想象这个设置可能会无意中出错。我会先解决这个问题,然后下面的答案之一将起作用。如果您无法自行修复数据,请添加有关如何导入数据的内容,我们会尝试为您修复。
-
谢谢你们。抱歉,这里我使用了一个简单的示例来展示我的 df 的外观。此外,我只是在没有标题的情况下导入,那就是它会自动为每一列分配标题。正如你所说,你的两个答案都很好!我很清楚!我的实际问题是,是否可以在不手动分配 col id 的情况下识别重复的列标题(如 M1 和聚合)?将其放入 for 循环中,我很困惑如何在循环中前进到下一个 agg?或者申请作品,怎么办?我想如果 v 能够算不上。 M1/M2/M3,然后for循环工作。让我知道你的看法?
标签: r duplicates aggregate