我想编写一个非常简单的程序:它应该遍历数据框中的所有列,如果至少有一个大于 1000 的观察值,那么程序应该将此变量除以 1000 并添加"in (000)"
到变量名中。
我的解决方案
set.seed(42)
df <- data.frame("Norm" = rnorm(100, 1000, 0.1), rexp(100))
for (var in seq_len(ncol(df))) {
if (max(df[, var], na.rm = T) > 1000) {
df[, var] <- df[, var] / 1000
colnames(df)[var] <- print(paste(colnames(df[var]), "(in 000')"))
}
}
不过我觉得有点不方便。我认为这里不需要循环。我试图用应用来做到这一点,但我不知道为什么我获得的最大列除以 1000 而不是每个值除以 1000 的数据框:
apply(df, 2, function(x) ifelse(max(x) > 1000, x/1000, x))
Norm rexp.100.
0.9999925 0.4473922
你知道如何在没有循环的情况下完成吗?