更换dplyr管道中的重复元件
我想替换组中重复的元素更换dplyr管道中的重复元件,r,dplyr,na,R,Dplyr,Na,我想替换组中重复的元素 df <- data.frame(A=c("a", "a", "a", "b", "b", "c"), group = c(1, 1, 2, 2, 2, 3)) df% 变异(B=第一个(A)) 这并不能产生我想要的。我想要的是B使用replace替换为replicated: df %>% group_by(group) %>% mutate(B = replace(A, duplicated(A), NA)) # A tibble: 6 x 2
df <- data.frame(A=c("a", "a", "a", "b", "b", "c"), group = c(1, 1, 2, 2, 2, 3))
df%
变异(B=第一个(A))
这并不能产生我想要的。我想要的是
B使用replace
替换为replicated
:
df %>% group_by(group) %>% mutate(B = replace(A, duplicated(A), NA))
# A tibble: 6 x 2
# Groups: group [3]
# A group
# <fctr> <dbl>
#1 a 1
#2 NA 1
#3 a 2
#4 b 2
#5 NA 2
#6 c 3
在data.table
中,您可以执行以下操作:
library(data.table)
setDT(df)[, B := c(A[1], rep(NA, .N - 1)), by = group]
或与dplyr中的逻辑相同:
library(dplyr)
df %>% group_by(group) %>% mutate(B = c(as.character(A[1]), rep(NA, n() - 1)))
# A tibble: 6 x 3
# Groups: group [3]
# A group B
# <fctr> <dbl> <chr>
#1 a 1 a
#2 a 1 <NA>
#3 a 2 a
#4 b 2 <NA>
#5 b 2 <NA>
#6 c 3 c
库(dplyr)
df%>%group_by(group)%>%mutate(B=c(as.character(A[1]),rep(NA,n()-1)))
#一个tibble:6x3
#分组:分组[3]
#A组B组
#
#1 a 1 a
#2 a 1
#3 a 2 a
#4 b 2
#5 b 2
#6c 3c
但这不是OP所期望的。@r2evans我在看他的陈述。替换组中重复的元素。但是是的,不确定OP到底想要什么。我会纠正我自己。。。它不是OP所显示的预期的向量,不管它是否是期望的。请求的内容和需要的内容并不总是相同的。:-)@是的。我修改了答案以处理因子数据类型。我认为我更喜欢replace
,因为它传输因子
并与其进行分级,而不是假设和/或强制。但这主要是我在展示我的风格,如果我可以避免的话,我更喜欢不假设和/或强制类型。你打算将A
作为因素
?如果你这样做,答案会有一点变化。(我通常使用stringsAsFactors=FALSE
,因此当我看到使用的因子时,我倾向于要求澄清。)
df %>%
group_by(group) %>%
mutate(B = replace(A, row_number() > 1, NA))
# A tibble: 6 x 2
# Groups: group [3]
# A group
# <fctr> <dbl>
#1 a 1
#2 NA 1
#3 a 2
#4 NA 2
#5 NA 2
#6 c 3
library(data.table)
setDT(df)[, B := c(A[1], rep(NA, .N - 1)), by = group]
library(dplyr)
df %>% group_by(group) %>% mutate(B = c(as.character(A[1]), rep(NA, n() - 1)))
# A tibble: 6 x 3
# Groups: group [3]
# A group B
# <fctr> <dbl> <chr>
#1 a 1 a
#2 a 1 <NA>
#3 a 2 a
#4 b 2 <NA>
#5 b 2 <NA>
#6 c 3 c