对于6个不同的列,我必须将所有值更改为“高” /“低”,具体取决于这些值是大于还是小于列的平均值。我写了一个函数来检查一列中的值是否小于/大于平均值,但它仅适用于其中一列:
my_list = [14,13,13,14]
def list_check(my_list):
if all(isinstance(i, int) and 12 <= i <= 20 for i in my_list):
print("true")
return True
list_check(my_list)
我现在想一次将此功能应用于所有6列(从听觉到视觉的列),但是我知道我必须为此更改calc.binary <- function(number){
number[number > mean(modality$auditory)] <- 'high'
number[!(number %in% 'high')] <- 'low'
number
}
modality_bin <- mutate_at(modality, vars(auditory:visual), list(calc.binary))
函数。如何更改函数,使其取每列的平均值并将该列中的数字与该平均值进行比较?因此,我可以将相同的功能应用于所有列。
答案 0 :(得分:1)
您可以使用:
library(dplyr)
modality %>%
mutate_at(vars(auditory:visual), ~ifelse(. > mean(.), "higher", "lower"))
答案 1 :(得分:1)
您应该能够在Base-R中使用apply
功能
apply(modality[,c(2:5)], 2,function(x) ifelse(x > mean(x),'high','low'))
modality[,c(2:5,8)]
是传递给函数的数据,因此,通过更改c(2:5,8)
中的值来选择所需的列。如果您希望每列都完成此操作,那么apply(modality, ...
就足够了。
此处apply( ,2 , )
2
表示我们要逐列运行函数。 1
表示逐行。
答案 2 :(得分:0)
使用lapply()
数据集作为示例,使用mtcars
的解决方案如下所示。我们使用数值向量处理mtcars
的列,并添加对mtcars
的引用作为lapply()
的第二个参数。我们创建比较,重命名列,然后与原始数据合并。
meansCompares <- lapply(1:ncol(mtcars),function(x,y){
ifelse(y[x] >= mean(y[[x]]),"High","Low")
},mtcars)
compares <- do.call(cbind,meansCompares)
# rename cols so we can join with original data
colnames(compares) <- paste0("comp_",colnames(compares))
head(cbind(mtcars,compares))
...以及输出:
> head(cbind(mtcars,compares))
mpg cyl disp hp drat wt qsec vs am gear carb comp_mpg comp_cyl comp_disp comp_hp comp_drat
Mazda RX4 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4 High Low Low Low High
Mazda RX4 Wag 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4 High Low Low Low High
Datsun 710 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1 High Low Low Low High
Hornet 4 Drive 21.4 6 258 110 3.08 3.215 19.44 1 0 3 1 High Low High Low Low
Hornet Sportabout 18.7 8 360 175 3.15 3.440 17.02 0 0 3 2 Low High High High Low
Valiant 18.1 6 225 105 2.76 3.460 20.22 1 0 3 1 Low Low Low Low Low
comp_wt comp_qsec comp_vs comp_am comp_gear comp_carb
Mazda RX4 Low Low Low High High High
Mazda RX4 Wag Low Low Low High High High
Datsun 710 Low High High High High Low
Hornet 4 Drive Low High High Low Low Low
Hornet Sportabout High Low Low Low Low Low
Valiant High High High Low Low Low