重复的行意味着原始变量
Duplicated rows means with original variables
我目前正在处理在实验室实验中生成的数据集,其中观察值加倍(测量两次)。
我有 ID
观察对象,value
结果,type
对象和 hour
它被测量(+120 其他分类,我想表达的字符和数字变量)。这是一个简化的数据框:
library(dplyr)
A <- c(1,1,2,2,3,3,4)
B <- A*2.5+(rnorm(2,A[A],sd = 0.2))
C <- c("banana","banana","poireau","poireau","melon","melon","kiwi")
D <- c("H1","H2","H3","H4","H5","H6","H7")
df <-data_frame(ID=as.integer(A),value=B,type=factor(C), hour=as.character(D))
df
# A tibble: 7 x 4
ID value type hour
<int> <dbl> <fctr> <chr>
1 1 3.337352 banana H1
2 1 3.398814 banana H2
3 2 5.837352 poireau H3
4 2 5.898814 poireau H4
5 3 8.337352 melon H5
6 3 8.398814 melon H6
7 4 10.837352 kiwi H7
我的目标是通过 ID 计算值的均值,以便只保留一个值,一个 ID,但仍保留其他变量。我试过的是:
df %>% group_by(ID) %>% summarise_if(is.double, mean)
# A tibble: 4 x 2
ID value
<int> <dbl>
1 1 3.368083
2 2 5.868083
3 3 8.368083
4 4 10.837352
如您所见,dplyr 响应我的命令:它表示只有双精度值,但我如何保留其他列?
至于 hour
字段,我希望保留 table 中的第一个值。所需的输出将是:
# A tibble: 4 x 4
ID `mean(value)` type hour
<int> <dbl> <fctr> <chr>
1 1 3.368083 banana H1
2 2 5.868083 poireau H3
3 3 8.368083 melon H5
4 4 10.837352 kiwi H7
谢谢!
重要的是,您的意思是超过 double
个变量吗?这是一个代码,适用于您的示例:
df %>% group_by(ID) %>% summarise(value = mean(value), type = first(type), hour = first(hour))
# A tibble: 4 x 4
ID value type hour
<int> <dbl> <fctr> <chr>
1 1 3.312154 banana H1
2 2 5.812154 poireau H3
3 3 8.312154 melon H5
4 4 10.690296 kiwi H7
我们可以做一个mutate_if
然后使用distinct
library(dplyr)
df %>%
group_by(ID) %>%
mutate_if(is.double, mean) %>%
distinct(ID, value, .keep_all = TRUE)
# A tibble: 4 x 4
# Groups: ID [4]
# ID value type hour
# <int> <dbl> <fctr> <chr>
#1 1 3.368083 banana H1
#2 2 5.868083 poireau H3
#3 3 8.368083 melon H5
#4 4 10.837352 kiwi H7
我目前正在处理在实验室实验中生成的数据集,其中观察值加倍(测量两次)。
我有 ID
观察对象,value
结果,type
对象和 hour
它被测量(+120 其他分类,我想表达的字符和数字变量)。这是一个简化的数据框:
library(dplyr)
A <- c(1,1,2,2,3,3,4)
B <- A*2.5+(rnorm(2,A[A],sd = 0.2))
C <- c("banana","banana","poireau","poireau","melon","melon","kiwi")
D <- c("H1","H2","H3","H4","H5","H6","H7")
df <-data_frame(ID=as.integer(A),value=B,type=factor(C), hour=as.character(D))
df
# A tibble: 7 x 4
ID value type hour
<int> <dbl> <fctr> <chr>
1 1 3.337352 banana H1
2 1 3.398814 banana H2
3 2 5.837352 poireau H3
4 2 5.898814 poireau H4
5 3 8.337352 melon H5
6 3 8.398814 melon H6
7 4 10.837352 kiwi H7
我的目标是通过 ID 计算值的均值,以便只保留一个值,一个 ID,但仍保留其他变量。我试过的是:
df %>% group_by(ID) %>% summarise_if(is.double, mean)
# A tibble: 4 x 2
ID value
<int> <dbl>
1 1 3.368083
2 2 5.868083
3 3 8.368083
4 4 10.837352
如您所见,dplyr 响应我的命令:它表示只有双精度值,但我如何保留其他列?
至于 hour
字段,我希望保留 table 中的第一个值。所需的输出将是:
# A tibble: 4 x 4
ID `mean(value)` type hour
<int> <dbl> <fctr> <chr>
1 1 3.368083 banana H1
2 2 5.868083 poireau H3
3 3 8.368083 melon H5
4 4 10.837352 kiwi H7
谢谢!
重要的是,您的意思是超过 double
个变量吗?这是一个代码,适用于您的示例:
df %>% group_by(ID) %>% summarise(value = mean(value), type = first(type), hour = first(hour))
# A tibble: 4 x 4
ID value type hour
<int> <dbl> <fctr> <chr>
1 1 3.312154 banana H1
2 2 5.812154 poireau H3
3 3 8.312154 melon H5
4 4 10.690296 kiwi H7
我们可以做一个mutate_if
然后使用distinct
library(dplyr)
df %>%
group_by(ID) %>%
mutate_if(is.double, mean) %>%
distinct(ID, value, .keep_all = TRUE)
# A tibble: 4 x 4
# Groups: ID [4]
# ID value type hour
# <int> <dbl> <fctr> <chr>
#1 1 3.368083 banana H1
#2 2 5.868083 poireau H3
#3 3 8.368083 melon H5
#4 4 10.837352 kiwi H7