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(即a1
存在)和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(即a1
存在)和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
即可