gpt4 book ai didi

R - dplyr - mutate_if 多个条件

转载 作者:行者123 更新时间:2023-12-02 01:22:16 24 4
gpt4 key购买 nike

我想根据多个条件改变列。例如,对于最大值为 5 并且列名称包含“xy”的每一列,应用一个函数。

df <- data.frame(
xx1 = c(0, 1, 2),
xy1 = c(0, 5, 10),
xx2 = c(0, 1, 2),
xy2 = c(0, 5, 10)
)
> df

xx1 xy1 xx2 xy2
1 0 0 0 0
2 1 5 1 5
3 2 10 2 10

df2 <- df %>% mutate_if(~max(.)==10, as.character)
> str(df2)
'data.frame': 3 obs. of 4 variables:
$ xx1: num 0 1 2
$ xy1: chr "0" "5" "10"
$ xx2: num 0 1 2
$ xy2: chr "0" "5" "10"
#function worked
df3 <- df %>% mutate_if(str_detect(colnames(.), "xy"), as.character)
> str(df3)
'data.frame': 3 obs. of 4 variables:
$ xx1: num 0 1 2
$ xy1: chr "0" "5" "10"
$ xx2: num 0 1 2
$ xy2: chr "0" "5" "10"
#Worked again

现在当我尝试将它们组合起来时

df4 <- df %>% mutate_if((~max(.)==10) & (str_detect(colnames(.), "xy")), as.character)

Error in (~max(.) == 10) & (str_detect(colnames(.), "xy")) : operations are possible only for numeric, logical or complex types

我错过了什么?

最佳答案

必须使用names而不是colnames

df4 <- df %>% mutate_if((max(.)==10 & str_detect(names(.), "xy")), as.character)

关于R - dplyr - mutate_if 多个条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51990450/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com