Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
更换dplyr管道中的重复元件_R_Dplyr_Na - Fatal编程技术网

更换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