【发布时间】:2017-09-18 04:46:02
【问题描述】:
我有一些看起来像这样的数据:
ID Data
1 a b c
2 a b c a b c
3 a b c
4 a b c a b c a b c a b c
5 a b c a b c a b c
我想要它在下面
ID Data
1 a b c
2 a b c
2 a b c
3 a b c
4 a b c
4 a b c
4 a b c
4 a b c
5 a b c
5 a b c
5 a b c
a、b 和 c 位于不同的列单元格中,因此 Data 实际上是很多列。如果需要,我可以将它们连接起来。
基本上 a b 和 c 是相关的,但对于某些 ID,我有多个结果,我希望数据采用长格式而不是宽格式,但保留每一行的 ID。
如果这也更容易的话,我可以用 R 来做。
输入:
structure(list(ID = c(9999812L, 999908L, 9993595L, 9992905L,
9989664L, 9984487L, 9980956L, 9980112L, 9980091L, 9979915L, 9979613L,
9979400L, 9978215L, 9976882L, 9975335L, 9974511L, 9973804L, 9973025L
), a = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L), .Label = "a", class = "factor"),
b = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L), .Label = "b", class = "factor"),
c = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L), .Label = "c", class = "factor"),
a.1 = structure(c(2L, 1L, 1L, 1L, 1L, 2L, 1L, 1L, 1L, 1L,
1L, 2L, 1L, 1L, 2L, 1L, 2L, 2L), .Label = c("", "a"), class = "factor"),
b.1 = structure(c(2L, 1L, 1L, 1L, 1L, 2L, 1L, 1L, 1L, 1L,
1L, 2L, 1L, 1L, 2L, 1L, 2L, 2L), .Label = c("", "b"), class = "factor"),
c.1 = structure(c(2L, 1L, 1L, 1L, 1L, 2L, 1L, 1L, 1L, 1L,
1L, 2L, 1L, 1L, 2L, 1L, 2L, 2L), .Label = c("", "c"), class = "factor"),
a.2 = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 2L, 1L, 1L, 2L, 1L, 1L, 2L), .Label = c("", "a"), class = "factor"),
b.2 = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 2L, 1L, 1L, 2L, 1L, 1L, 2L), .Label = c("", "b"), class = "factor"),
c.2 = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 2L, 1L, 1L, 2L, 1L, 1L, 2L), .Label = c("", "c"), class = "factor"),
a.3 = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 2L, 1L, 1L, 2L), .Label = c("", "a"), class = "factor"),
b.3 = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 2L, 1L, 1L, 2L), .Label = c("", "b"), class = "factor"),
c.3 = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 2L, 1L, 1L, 2L), .Label = c("", "c"), class = "factor"),
a.4 = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L), .Label = c("", "a"), class = "factor"),
b.4 = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L), .Label = c("", "b"), class = "factor"),
c.4 = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L), .Label = c("", "c"), class = "factor")), .Names = c("ID",
"a", "b", "c", "a.1", "b.1", "c.1", "a.2", "b.2", "c.2", "a.3",
"b.3", "c.3", "a.4", "b.4", "c.4"), class = "data.frame", row.names = c(NA,
-18L))
【问题讨论】:
-
有列标题吗? (例如,
a总是“名字”吗?是否只有这三种数据类型,或者是否有列d等您只想忽略? -
如果 'a', 'b', 'c' 在不同的列中,那么你会有不同的列名。
-
每一行都有一个唯一的 id。
-
我可以设置标题,但长度不相等,我不希望行 ID 后跟空白单元格。第一个表中的 ID 是唯一的。它不会在转换时出现,因此它可以解释具有多个 a、b 和 c 的第一行中的行
-
是的,我使用的是 read.table("clipboard", header=T, fill=T) 但它之前没有出现。这更准确,但我用 b 和 c 替换了我的字符串
标签: r excel data-manipulation