在数据组中区别于r

时间:2017-12-19 08:20:32

标签: r dataframe dplyr distinct transformation

如何将数据帧(左侧)转换为数据帧(右侧)?

enter image description here

我试图通过dplyr这样做,通过分组到名称和不同,但它只提供3行

df %>%
group_by(name) %>%
distinct(.,keep.all = T) %>%
View()

1 个答案:

答案 0 :(得分:0)

有一种简单的方法可以访问您想要更改的所有单元格:

data <- data.frame(name = c(rep("A", 5), rep("B", 5), rep("C", 5)), subject = c(rep(1:5, 3)), marks = sample(1:100, 15))

> data
   name subject marks
1     A       1    31
2     A       2    12
3     A       3    29
4     A       4    67
5     A       5    99
6     B       1    77
7     B       2     3
8     B       3    92
9     B       4    69
10    B       5    42
11    C       1    52
12    C       2    66
13    C       3    98
14    C       4    23
15    C       5    72

duplicated(data$name)访问相关单元格。但是,R没有办法让单元格“空白”,可以这么说。

您可以设置NA,也可以填空character

data$name[duplicated(data$name)] <- NA

> data
   name subject marks
1     A       1    31
2  <NA>       2    12
3  <NA>       3    29
4  <NA>       4    67
5  <NA>       5    99
6     B       1    77
7  <NA>       2     3
8  <NA>       3    92
9  <NA>       4    69
10 <NA>       5    42
11    C       1    52
12 <NA>       2    66
13 <NA>       3    98
14 <NA>       4    23
15 <NA>       5    72
data$name <- as.character(data$name)
data$name[duplicated(data$name)] <- ""

> data
   name subject marks
1     A       1    30
2             2    52
3             3     5
4             4    48
5             5    99
6     B       1    14
7             2    20
8             3    34
9             4    55
10            5    53
11    C       1    38
12            2    27
13            3    67
14            4    12
15            5    77

要将后一种解决方案与factor变量一起使用,您需要添加""作为因子标签:

data$name <- factor(as.numeric(data$name), 1:4, c(levels(data$name), ""))
data$name[duplicated(data$name)] <- ""