【问题标题】:How to merge multiple columns into one column?如何将多列合并为一列?
【发布时间】:2017-08-23 14:41:55
【问题描述】:

我目前的数据分布在 R 中的多个列中。我正在寻找一种方法将这些信息作为每个单独行的向量放入一列中。

有这样的功能吗?

例如,数据如下所示:

DF <- data.frame(id=rep(LETTERS, each=1)[1:26], replicate(26, sample(1001, 26)), Class=sample(c("Yes", "No"), 26, TRUE))

select(DF, cols=c("id", "X1","X2", "X23", "Class"))

如何将“X1”、“X2”、“X23”列合并到包含每个 ID 的数字类型变量的向量中?

【问题讨论】:

  • 这会将一列中的数据收集为每一行的列表吗?
  • 请展示一个可重现的示例,说明您拥有什么以及最后想要什么。目前,这听起来像是 this question 的复制品。
  • tidyr::unitetidyr::gather(两个非常不同的功能)中的任何一个都按照您的想法做吗?目前有点不清楚。
  • 拥有示例数据是一个好的开始,您可以添加您的预期输出吗?
  • 我希望在一列 X 中有不同 X_ 的所有值,但存储为列表。对于 ID A,我希望新 X 列的第一个条目为 c(733, 70, 118) ?

标签: r dplyr multiple-columns


【解决方案1】:

像这样?

library(reshape2)
melt(df) %>% dcast(id ~ ., fun.aggregate = list)

Using id, Class as id variables
   id             .
1   A  422, 74, 439
2   B 879, 443, 923
3   C 575, 901, 749
4   D  813, 747, 21
5   E 438, 526, 675
6   F 863, 562, 474
7   G 103, 713, 918
8   H 585, 294, 525
9   I  115, 76, 175
10  J 953, 379, 926
11  K 679, 439, 377
12  L 816, 624, 538
13  M 678, 226, 142
14  N 667, 369, 586
15  O 795, 422, 248
16  P  165, 22, 612
17  Q 294, 476, 746
18  R 968, 368, 290
19  S 238, 481, 980
20  T 921, 482, 741
21  U  550, 15, 296
22  V 121, 358, 625
23  W 213, 313, 242
24  X    92, 77, 58
25  Y 607, 936, 350
26  Z  660, 42, 275

请注意:我不知道您的最终用例,但这让我觉得您可能不想拥有。坚持整洁的数据通常更可取,参见例如https://cran.r-project.org/web/packages/tidyr/vignettes/tidy-data.html

【讨论】:

  • 是的,谢谢。这些列表是否包含数值变量?
  • 是的,它们确实包含整数。试试看,看看str(object)
猜你喜欢
  • 2020-05-01
  • 2018-11-04
  • 1970-01-01
  • 2015-03-29
  • 1970-01-01
  • 1970-01-01
  • 2020-04-14
相关资源
最近更新 更多