R中像元值在特定范围内的子集数据- R

wswtfjt7  于 2023-03-20  发布在  其他
关注(0)|答案(2)|浏览(137)

我有如下的大数据:

Age_group_1<-c(18,18,18,21,21,21,30,36,36,42,42)
Age_group_2<-c(15,15,17,19,19,21,25,25,25,33,33)
Age_group_3<-c(12,12,13,13,22,22,25,25,27,27,30)
Age_group_4<-c(8,10,15,15,25,25,28,28,30,30,30)

Mydata<-data.frame(Age_group_1,Age_group_2,Age_group_3,Age_group_4)

> Mydata
   Age_group_1 Age_group_2 Age_group_3 Age_group_4
1           18          15          12           8
2           18          15          12          10
3           18          17          13          15
4           21          19          13          15
5           21          19          22          25
6           21          21          22          25
7           30          25          25          28
8           36          25          25          28
9           36          25          27          30
10          42          33          27          30
11          42          33          30          30

我想移除小于18和大于35的值。我尝试过使用子集,但未得到所需的结果

New_data<-na.omit(subset(Mydata,(18<=Mydata & Mydata <= 35)))

这就是我正在寻找的结果:

>New_data
          Age_group_1 Age_group_2 Age_group_3 Age_group_4
1           18          NA          NA          NA
2           18          NA          NA          NA
3           18          NA          NA          NA
4           21          19          NA          NA
5           21          19          22          25
6           21          21          22          25
7           30          25          25          28
8           NA          25          25          28
9           NA          25          27          30
10          NA          33          27          30
11          NA          33          30          30

关于我如何才能达到最终结果,有什么建议吗?

m1m5dgzv

m1m5dgzv1#

你想要这个:

Mydata[18 > Mydata | 35 < Mydata] <- NA

#    Age_group_1 Age_group_2 Age_group_3 Age_group_4
# 1           18          NA          NA          NA
# 2           18          NA          NA          NA
# 3           18          NA          NA          NA
# 4           21          19          NA          NA
# 5           21          19          22          25
# 6           21          21          22          25
# 7           30          25          25          28
# 8           NA          25          25          28
# 9           NA          25          27          30
# 10          NA          33          27          30
# 11          NA          33          30          30
xzlaal3s

xzlaal3s2#

试试看

library(dplyr)
Mydata %>%
   mutate(across(everything(), ~  case_when(between(.x, 18, 35) ~ .x)))

相关问题