r - 如何根据 R 中多个变量的标准差创建新数据框
问题描述
我想根据条件从现有数据框创建一个新的数据框“data.frame.final” - 例如,我的数据框中所有变量的 +/-3 标准偏差。
我有 5 个变量,我需要生成一个具有相同标准的新数据框,+/- 3 SD,应用于所有变量。
tt <- "id_animal farm protein fat casein lactose
1 AG 3.0 9.0 2.3 1.5
2 AG 3.0 9.7 3.3 1.3
3 FA 2.0 7.6 4.3 2.4
4 AB 1.5 6.9 5.4 2.8
5 AB 2.9 7.3 3.4 2.9"
dataframe1 <- read.table (text=tt, header=T)
在data.frame.final
我只想要每个变量在 +/- 3 SD 内的值。对于低于或高于 3 SD 的值,我想插入“NA”。
解决方案
您的示例数据中没有任何值与平均值相差超过 3 个标准差。这是一个修改后的例子
tx <- "id_animal farm protein fat casein lactose
1 AG 3.0 9.0 2.3 1.5
2 AG 3.0 910.7 3.3 1.3
3 FA 2.0 7.6 4.3 25.4
4 AB 1.5 6.9 555.4 2.8
5 AB 220.9 7.3 3.4 2.9"
df <- read.table (text=tx, header=T)
df
# id_animal farm protein fat casein lactose
# 1 1 AG 3.0 9.0 2.3 1.5
# 2 2 AG 3.0 910.7 3.3 1.3
# 3 3 FA 2.0 7.6 4.3 25.4
# 4 4 AB 1.5 6.9 555.4 2.8
# 5 5 AB 220.9 7.3 3.4 2.9
实际上,仍然没有超过平均值 3 个标准差的值。我将使用 1 个标准差。改变n_sds
以控制这一点。
对于除前两列之外的所有列,replace
所有值 not( !
)between
这两个值由 给出mean(.) + c(-1, 1)*n_sds*sd(.)
,即均值减n_sds*sd(.)
和均值加n_sds*sd(.)
,其中NA
。
library(dplyr)
n_sds <- 1
df %>%
mutate_at(-(1:2), ~ {
rng <- mean(.) + c(-1, 1)*n_sds*sd(.)
replace(., !between(., rng[1], rng[2]), NA)
})
# id_animal farm protein fat casein lactose
# 1 1 AG 3.0 9.0 2.3 1.5
# 2 2 AG 3.0 NA 3.3 1.3
# 3 3 FA 2.0 7.6 4.3 NA
# 4 4 AB 1.5 6.9 NA 2.8
# 5 5 AB NA 7.3 3.4 2.9
推荐阅读
- ios - 将自定义按钮视图设置为 BackBarButtonItem
- python - 编码后连接数据帧
- database - 如何为已删除的文件创建实体
- python - Python imaplib fetch 返回“无法解析命令”错误
- python-3.x - 使用 pandas 在 python 中导入数据
- python - 使用 capiq-python 包时出现错误(JSONDecodeError: Expecting value: line 1 column 1 (char 0))
- python - 如何使用 Keras 神经网络分类器绘制 KFold 交叉验证中每个折叠的 ROC_AUC 曲线
- java - Corretto 8 中的 Jcontrol 等效项
- python - Discord.py 存储和输出记录/警告
- python - 在对象检测问题中获取 len(dataset) = 0