【问题标题】:how to organize a data using a handy function? [closed]如何使用方便的功能组织数据? [关闭]
【发布时间】:2015-07-16 07:39:34
【问题描述】:

人们常说,80% 的数据分析都花在了清理和准备数据上。

在这方面,我有时会花费相当长的时间来塑造我的数据并最终获得data.frame,如可重现的示例所示。

我想在我的数据中将行组织为列并将它们排序为唯一值之一。

您可以假设No 是一个关键列,它将确定转置数据框中的列数

这是一个可重现的例子;

set.seed(1)
No <- rep(seq(0,95,1),times=3)
AC <- rep(rep(c(78,110),each=1),times=length(No)/2)
AR <- rep(rep(c(256,320,384),each=2),times=length(No)/6)
AM <- rep(1,times=length(No))
DQ <- rep(rep(seq(0,15,1),each=6),times=3)
V <- rep(seq(100,300,100),each=96)
R <- rep(sample(5000:6000,96),times=3)

df <- data.frame(No,AC,AR,AM,DQ,V,R)
head(df)
  No  AC  AR AM DQ   V    R
1  0  78 256  1  0 100 5455
2  1 110 256  1  0 100 5410
3  2  78 320  1  0 100 5810
4  3 110 320  1  0 100 5603
5  4  78 384  1  0 100 5652
6  5 110 384  1  0 100 5351

我正在寻找的输出;

#  No        0     1        2      3     4      5     6     7    8     9      10     11      *    *   *  95  
#  AC       78     110     78     110    78    110   78    110  78    110     78    110      *    *   * 110
#  AR      256     256     320    320    384   384  256    256  320   320    384    384      *    *   * 384
#  AM        1      1       1      1      1     1    1      1    1     1       1      1      *    *   *   1
#  DQ        0      0       0      0      0     0    1      1    1     1       1      1      *    *   *  15 
#   V       
#  100     5265   5372    5572    5906   5201  5894  5939  5656  5624 5061  5204    5174     *    *   * 5722
#  200     5256   5720    5162    5481   5977  5711  5600  5752  5042 5885  5759    5467     *    *   * 5722
#  300     5265   5372    5572    5906   5201  5894  5939  5656  5624 5061  5204    5174     *    *   * 5722  

【问题讨论】:

  • 我们可以假设什么是关键列,它将决定转置数据框中的列数? No的唯一值?
  • @aoron barlow 在 Simon 删除他的答案之前刚刚注意到您的评论:“最后我需要绘制这些 R 值与 V”。请清楚说明您希望达到的目标。现在你的问题可能听起来像XY problem。另外,让你的例子minimal - 更容易玩。
  • @aoronbarlow 目前还不清楚您想如何获得所需的输出,以及 R1-R95 应该来自哪里。例如,在样本数据的头部,R 为 5455,V=100,No=0。但是,在 No = 0 下,此 R 值不在您想要的输出中。您到底想达到什么目的?
  • @Heroka 你可以认为 R1-R95 列是空的。我只想提一下这是我要寻找的输出。我确定有功能可以做到,但我现在不知道。
  • 5256 5720 5162 , ... 中的数字不会出现在您的输入中,但您希望在输出中看到它们。据我所知,除该行之外的所有内容都只是df %&gt;% group_by(No) %&gt;% mutate(R100 = R[V == 100], R200 = R[V == 200], R300 = R[V == 300], R = NULL, V = NULL) %&gt;% unique %&gt;% t

标签: r dataframe dplyr reshape2 tidyr


【解决方案1】:

您只是在寻找tidyr 中的spread 吗?然后你当然可以用t 转置。

t(spread(df, V, R))
##        1    2    3    4    5    6    7    8    9   10   11   12   13   14   15   16   17 
## No     0    1    2    3    4    5    6    7    8    9   10   11   12   13   14   15   16
## AC    78  110   78  110   78  110   78  110   78  110   78  110   78  110   78  110   78
## AR   256  256  320  320  384  384  256  256  320  320  384  384  256  256  320  320  384
## AM     1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1
## DQ     0    0    0    0    0    0    1    1    1    1    1    1    2    2    2    2    2
## 100 5265 5372 5572 5906 5201 5894 5939 5656 5624 5061 5204 5174 5679 5379 5759 5490 5706
## 200 5265 5372 5572 5906 5201 5894 5939 5656 5624 5061 5204 5174 5679 5379 5759 5490 5706
## 300 5265 5372 5572 5906 5201 5894 5939 5656 5624 5061 5204 5174 5679 5379 5759 5490 5706

【讨论】:

  • 一切正常!感谢您的出色回答。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-08-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多