删除均值小于某个值的行 - R
Delete rows whose mean is less than a certain value - R
我正在尝试删除平均值 < 1 的数据帧的所有行。我可以通过首先创建一个具有平均值的列,然后根据该列值删除,但是我正在寻找一个在不编辑数据框本身的情况下执行此操作的更简洁方法。
ex df:
一个
B
C
D
E
x
1
3
2
1
y
0
1
0.5
1
z
0
2
1
0
期望的结果:
一个
B
C
D
E
x
1
3
2
1
z
0
2
1
0
您可以使用 rowMeans
计算每一行的平均值,并删除平均值小于 1 的行。
df[rowMeans(df[-1], na.rm = TRUE) > 1,]
# A B C D E
#1 x 1 3 2 1
使用dplyr
-
library(dplyr)
df %>% filter(rowMeans(select(., where(is.numeric))) > 1)
另一种方法:
df[apply(df[-1],1,function(x) mean(x) > 1),]
# A tibble: 1 x 5
A B C D E
<chr> <dbl> <dbl> <dbl> <dbl>
1 x 1 3 2 1
在base R
中使用subset
subset(df, rowMeans(df[-1], na.rm = TRUE) > 1)
我正在尝试删除平均值 < 1 的数据帧的所有行。我可以通过首先创建一个具有平均值的列,然后根据该列值删除,但是我正在寻找一个在不编辑数据框本身的情况下执行此操作的更简洁方法。
ex df:
一个 | B | C | D | E |
---|---|---|---|---|
x | 1 | 3 | 2 | 1 |
y | 0 | 1 | 0.5 | 1 |
z | 0 | 2 | 1 | 0 |
期望的结果:
一个 | B | C | D | E |
---|---|---|---|---|
x | 1 | 3 | 2 | 1 |
z | 0 | 2 | 1 | 0 |
您可以使用 rowMeans
计算每一行的平均值,并删除平均值小于 1 的行。
df[rowMeans(df[-1], na.rm = TRUE) > 1,]
# A B C D E
#1 x 1 3 2 1
使用dplyr
-
library(dplyr)
df %>% filter(rowMeans(select(., where(is.numeric))) > 1)
另一种方法:
df[apply(df[-1],1,function(x) mean(x) > 1),]
# A tibble: 1 x 5
A B C D E
<chr> <dbl> <dbl> <dbl> <dbl>
1 x 1 3 2 1
在base R
subset
subset(df, rowMeans(df[-1], na.rm = TRUE) > 1)