gpt4 book ai didi

r - 使用 NA 计算列中位数

转载 作者:行者123 更新时间:2023-12-02 22:14:13 26 4
gpt4 key购买 nike

我正在尝试计算 R 中各个列的中位数,然后用该列中的每个值减去中值。我在这里面临的问题是我的列中有 N/A,我不想删除它们,但只是返回它们而不减去中位数。例如

ID <- c("A","B","C","D","E") 
Point_A <- c(1, NA, 3, NA, 5)
Point_B <- c(NA, NA, 1, 3, 2)

df <- data.frame(ID,Point_A ,Point_B)

是否可以计算具有 N/A 的列的中位数?我的结果输出是

+----+---------+---------+
| ID | Point_A | Point_B |
+----+---------+---------+
| A | -2 | NA |
| B | NA | NA |
| C | 0 | -1 |
| D | NA | 1 |
| E | 2 | 0 |
+----+---------+---------+

最佳答案

如果我们谈论真实的 NA 值(根据 OP 评论),可以做到

df[-1] <- lapply(df[-1], function(x) x - median(x, na.rm = TRUE))
df
# ID Point_A Point_B
# 1 A -2 NA
# 2 B NA NA
# 3 C 0 -1
# 4 D NA 1
# 5 E 2 0

或者使用matrixStats

library(matrixStats)
df[-1] <- df[-1] - colMedians(as.matrix(df[-1]), na.rm = TRUE)
<小时/>

当原始df

df <- structure(list(ID = structure(1:5, .Label = c("A", "B", "C", 
"D", "E"), class = "factor"), Point_A = c(1, NA, 3, NA, 5), Point_B = c(NA,
NA, 1, 3, 2)), .Names = c("ID", "Point_A", "Point_B"), row.names = c(NA,
-5L), class = "data.frame")

关于r - 使用 NA 计算列中位数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29954124/

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