对数据帧的每个元素执行ifelse(),但对R中的每个列执行不同的测试
我有一个大数据帧[4000600],如果元素小于每列最大值的三个数量级,我想将元素转换为0。因此,需要将每个元素与其列的最大值进行比较,如果元素<0.001*$column_max,则应将其转换为0,如果不是,则应保持不变对数据帧的每个元素执行ifelse(),但对R中的每个列执行不同的测试,r,dataframe,apply,R,Dataframe,Apply,我有一个大数据帧[4000600],如果元素小于每列最大值的三个数量级,我想将元素转换为0。因此,需要将每个元素与其列的最大值进行比较,如果元素
我很难让apply()允许我使用ifelse()函数。我是否缺少更好的方法或功能??我对R相当陌生。使用
lappy
以replace
调用循环遍历每一列:
dat <- data.frame(a=c(1,2,1001),b=c(3,4,3003))
dat
# a b
#1 1 3
#2 2 4
#3 1001 3003
dat[] <- lapply(dat, function(x) replace(x, x < max(x)/10^3, 0) )
dat
# a b
#1 0 0
#2 2 4
#3 1001 3003
dat使用lappy
使用replace
调用在每个列上循环:
dat <- data.frame(a=c(1,2,1001),b=c(3,4,3003))
dat
# a b
#1 1 3
#2 2 4
#3 1001 3003
dat[] <- lapply(dat, function(x) replace(x, x < max(x)/10^3, 0) )
dat
# a b
#1 0 0
#2 2 4
#3 1001 3003
dat如果使用apply column wise(按列应用),则应使用ifelse:
df <- data.frame(a = c(1:10, 4000), b = c(4:13, 7000))
apply(df, 2, function(x){ifelse(x < 0.001*max(x), 0, x)})
df如果使用apply column wise(按列应用),则应使用ifelse:
df <- data.frame(a = c(1:10, 4000), b = c(4:13, 7000))
apply(df, 2, function(x){ifelse(x < 0.001*max(x), 0, x)})
df我们可以在不使用ifelse的情况下执行此操作
library(dplyr)
dat %>%
mutate_each(funs((.>= 0.001*max(.))*.))
# a b
#1 0 0
#2 2 4
#3 1001 3003
数据
dat我们不需要使用ifelse
library(dplyr)
dat %>%
mutate_each(funs((.>= 0.001*max(.))*.))
# a b
#1 0 0
#2 2 4
#3 1001 3003
数据
dat如果你想要一个好答案,我建议你发布一段代码。如果你想要一个好答案,我建议发布一段代码。