修改R中的数据框

时间:2016-10-04 08:31:18

标签: r data-structures dataframe tidyr

我有一个类似的数据框,由500行和60列组成。

   **%d1 %d2 %d3**

pr1 0.1 0.2 0.2

pr2 0.0 0.1 0.1

pr3 0.3 0.3 0.3

pr4 0.2 0.4 0.4

我想以这种方式为每个数据创建一行

 **%   

pr1 0.1

pr1 0.2

pr1 0.2

pr2 0.0

pr2 0.1

pr2 0.1

pr3 0.2

pr3 0.4

.....

我该怎么办?

4 个答案:

答案 0 :(得分:2)

您可以使用reshape2包中的melt()函数。它将数据帧从宽形式转换为长形式。

> print(D2[order(D2$id),])
    id variable  id
1  pr1        1 0.1
5  pr1        2 0.2
9  pr1        3 0.2
2  pr2        1 0.0
6  pr2        2 0.1
10 pr2        3 0.1
3  pr3        1 0.3
7  pr3        2 0.3
11 pr3        3 0.3
4  pr4        1 0.2
8  pr4        2 0.4
12 pr4        3 0.4

结果:

ng-model="arform.mainconcern"

答案 1 :(得分:2)

略有不同的方式:

data=data.frame(id=c("pr1","pr2","pr3","pr4"),
                d1=c(0.1,0,0.3,0.2),
                d2=c(0.2,0.1,.3,0.4),
                d3=c(0.2,0.1,0.3,0.4))
library(reshape2)
library(dplyr)
data%>%melt(id.vars="id")%>%group_by(id,value)%>%summarise(count=n())

给出:

      id value count
  <fctr> <dbl> <int>
1    pr1   0.1     1
2    pr1   0.2     2
3    pr2   0.0     1
4    pr2   0.1     2
5    pr3   0.3     3
6    pr4   0.2     1
7    pr4   0.4     2

答案 2 :(得分:1)

以下版本使用tidyr,它基本上是reshape2 2.0,并且设计用于包括dplyr,ggplot2等的tidyverse包套件。 代码将数据收集到整齐的形式,将变量头转换为新列,但不包括列“id”。 然后,数据以id顺序排列,但代表前一个标题的列将被删除。

library(tidyr);library(dplyr)
 data %>% gather(., key="var", value="value", -id) %>% 
 arrange(id) %>%
 select(-var)

保留“var”列可能是明智的,因为它可以为后续处理或可视化提供更大的灵活性(例如,通过该列着色)

答案 3 :(得分:0)

您可以使用库dplyrreshape2执行此操作。我还需要从假定的row.names创建一个Id列:

重新创建数据:

df = data.frame(d1=c(0.1,0,0.3,0.2), d2=c(0.2,0.1,0.3,0.4), d3=c(0.2,0.1,0.3,0.4))
row.names(df) = c("pr1", "pr2", "pr3", "pr4")

计算:首先我们添加id列,然后我们&#34;分解&#34;数据框,然后我将字符中的日期更改为数字,并按ID排序以获得与您相同的结果。

library(dplyr); library(tibble); library(reshape2)
df %>% rownames_to_column("id") %>% melt %>% mutate(day=as.numeric(variable)) %>% 
  select(id, day, pc_cum=value) %>% arrange(id)
####     id day pc_cum
#### 1  pr1   1    0.1
#### 2  pr1   2    0.2
#### 3  pr1   3    0.2
#### 4  pr2   1    0.0
#### 5  pr2   2    0.1