用 NA 替换特定范围的数字
replace specific range of numbers with NA
我正在处理一个数据框,其中一列中有一些不可接受的数字。我想知道如何用 R 中的 NA 值替换特定范围内的数字?
例如
> V1 <- c(23,2,4)
> V2 <- c(7,2,9)
> V3 <- c(23,2,9)
> df <- data.frame(V1, V2, V3)
V1 V2 V3
[1,] 23 7 23
[2,] 2 2 2
[3,] 4 9 9
在此数据框中,首先我想将第 1 列中所有超过 20 的数字更改为 NA(因为超过 20 的数字对于我拥有的数据来说是不现实的)然后取该列的平均值。
所以结果数据框将是:
V1 V2 V3
[1,] NA 7 23
[2,] 2 2 2
[3,] 4 9 9
第一列的平均值为 (2+4)/2=3
也许试试这个:
library(dplyr)
#Code
mat <- matrix(c(23,2,4,7,2,9,23,2,9), ncol = 3)
mat <- as.data.frame(mat)
#Solution for replace
mat %>% mutate(V1=ifelse(V1>20,NA,V1)) %>%
colMeans(.,na.rm=T)
输出:
V1 V2 V3
3.00000 6.00000 11.33333
我们可以使用base R
来做到这一点。将第一列大于20的元素替换为NA
,得到mean
df[,1][df[,1] > 20] <- NA
mean(df[,1], na.rm = TRUE)
#[1] 3
以及所有其他列
colMeans(df, na.rm = TRUE)
# V1 V2 V3
#3.00000 6.00000 11.33333
或单行
mean(df[,1][df[,1] <= 20], na.rm = TRUE)
#[1] 3
基础 R 解决方案:
colMeans(within(df, {V1 <- replace(V1, V1 > 20, NA_integer_)}), na.rm = TRUE)
我正在处理一个数据框,其中一列中有一些不可接受的数字。我想知道如何用 R 中的 NA 值替换特定范围内的数字? 例如
> V1 <- c(23,2,4)
> V2 <- c(7,2,9)
> V3 <- c(23,2,9)
> df <- data.frame(V1, V2, V3)
V1 V2 V3
[1,] 23 7 23
[2,] 2 2 2
[3,] 4 9 9
在此数据框中,首先我想将第 1 列中所有超过 20 的数字更改为 NA(因为超过 20 的数字对于我拥有的数据来说是不现实的)然后取该列的平均值。
所以结果数据框将是:
V1 V2 V3
[1,] NA 7 23
[2,] 2 2 2
[3,] 4 9 9
第一列的平均值为 (2+4)/2=3
也许试试这个:
library(dplyr)
#Code
mat <- matrix(c(23,2,4,7,2,9,23,2,9), ncol = 3)
mat <- as.data.frame(mat)
#Solution for replace
mat %>% mutate(V1=ifelse(V1>20,NA,V1)) %>%
colMeans(.,na.rm=T)
输出:
V1 V2 V3
3.00000 6.00000 11.33333
我们可以使用base R
来做到这一点。将第一列大于20的元素替换为NA
,得到mean
df[,1][df[,1] > 20] <- NA
mean(df[,1], na.rm = TRUE)
#[1] 3
以及所有其他列
colMeans(df, na.rm = TRUE)
# V1 V2 V3
#3.00000 6.00000 11.33333
或单行
mean(df[,1][df[,1] <= 20], na.rm = TRUE)
#[1] 3
基础 R 解决方案:
colMeans(within(df, {V1 <- replace(V1, V1 > 20, NA_integer_)}), na.rm = TRUE)