R 基于另一列筛选并替换列中的值

R 基于另一列筛选并替换列中的值,r,dplyr,R,Dplyr,下面是我拥有的数据集样本 structure(list(x = c("P", "P", "P", "P"), y = c("0", "0", "1", "0"), z = c("0", "0", "0", "CD")), row.names = c(NA, -4L), class = "data.frame") 对于x中出现的p队列,我需要检查z是否包含CD,如果包含,则检查y中的1值。如果是,则将CD替换为X 期望输出 CD和1永远不会出现在同一行中,必须按x分组 感谢您的帮助。谢谢

下面是我拥有的数据集样本

structure(list(x = c("P", "P", "P", "P"), y = c("0", "0", "1", 
"0"), z = c("0", "0", "0", "CD")), row.names = c(NA, -4L), class = "data.frame")

对于
x
中出现的
p
队列,我需要检查
z
是否包含
CD
,如果包含,则检查
y
中的
1
值。如果是,则将
CD
替换为
X

期望输出

CD
1
永远不会出现在同一行中,必须按
x
分组


感谢您的帮助。谢谢

您可以尝试一个简单的
ifelse
语句,检查
y
之和是否大于0(即a
1
存在)和
z
是否为“CD”

library(dplyr)

df %>% 
 group_by(x) %>% 
 mutate(z = ifelse(any(y == '1') & z == 'CD', 'x', z))

# A tibble: 4 x 3
# Groups:   x [1]
#  x         y z    
#  <chr> <dbl> <chr>
#1 P         0 0    
#2 P         0 0    
#3 P         1 0    
#4 P         0 x    
库(dplyr)
df%>%
分组依据(x)%>%
变异(z=ifelse(任意(y='1')&z='CD','x',z))
#一个tibble:4x3
#分组:x[1]
#x y z
#    
#1 P 0 0
#2P00
#3p10
#4p0x

您可以尝试一个简单的
ifelse
语句,检查
y
之和是否大于0(即a
1
存在)和
z
是否为“CD”

library(dplyr)

df %>% 
 group_by(x) %>% 
 mutate(z = ifelse(any(y == '1') & z == 'CD', 'x', z))

# A tibble: 4 x 3
# Groups:   x [1]
#  x         y z    
#  <chr> <dbl> <chr>
#1 P         0 0    
#2 P         0 0    
#3 P         1 0    
#4 P         0 x    
库(dplyr)
df%>%
分组依据(x)%>%
变异(z=ifelse(任意(y='1')&z='CD','x',z))
#一个tibble:4x3
#分组:x[1]
#x y z
#    
#1 P 0 0
#2P00
#3p10
#4p0x

这是一个带有
基本R
的解决方案,其中
ifelse()
用于替换

df <- Reduce(rbind,lapply(split(df,df$x),
                          function(v) within(v,z <- ifelse(any(y==1) & z=="CD","X",z))))

下面是一个带有
base R
的解决方案,其中
ifelse()
用于替换

df <- Reduce(rbind,lapply(split(df,df$x),
                          function(v) within(v,z <- ifelse(any(y==1) & z=="CD","X",z))))

忘了提到我的坏
y
列是字符,它有其他字符值,但我只需要1(值)过滤器,所以转换为
数值是安全的
,还是应该使用
任何
?如果它只有0和1,只需将其转换为数值。不需要保留它一个characterIt除了0和1还有其他字符值是的只要做
any
然后忘记提到我的坏
y
列是character它有其他字符值,但我只需要1(值)过滤器所以转换为
数值
安全吗?或者我应该使用
任何
?如果它只有0和1,只需将其转换为数值。无需保留它characterIt除了0和1还有其他字符值是的,只需执行
any
即可