将数字范围重新编码为R中的单个数字

C。我是

我试图重新编码具有四列的数据框。在所有列中,我想将所有数字值重新编码为以下顺序数字值:

  • 0保持原样
  • 1:3 <-1
  • 4:10 <-2
  • 11:22 <-3
  • 22:最大<-4

这是数据帧:

> df
   T4.1 T4.2 T4.3 T4.4
1     0   54    0    5
2     0    5    0    0
3     0    3    0    0
4     0    2    0    0
5     0    3    0    0
6     0    2    0    0
7     0    4    0    0
8     1   20    0    0
9     1    7    0    2
10    0   14    0    0
11    0    3    0    0
12    0  202    0   41
13    2   12    0    0
14    3    6    0    0
15    3   21    0    3
16    0  143    0    0
17    0    0    0    0
18    4    9    0    0
19    3   15    0    0
20    0   58    0    6
21    2    0    0    0
22    0   52    0    0
23    0    3    0    0
24    0    1    0    0
25    4    6    0    1
26    1    4    0    0
27    0   38    0    1
28    0    6    0    0
29    0    8    0    0
30    0   29    0    4
31    1   14    0    0
32    0   12    0   10
33    4    1    0    3

我正在尝试使用该recode函数,但似乎无法弄清楚如何在其中输入一系列数值。我的尝试出现以下错误:

> recode(df, 11:22=3)
Error: unexpected '=' in "recode(df, 11:22="
> recode(df, c(11:22)=3)
Error: unexpected '=' in "recode(df, c(11:22)="

我将不胜感激任何建议。谢谢你的时间!

编辑:谢谢大家的帮助!

MKR

您可以使用以下cut范围的值:

df_res <- as.data.frame(sapply(df, function(x)cut(x, 
            breaks = c(-0.5, 0.5, 3.5, 10.5, 22.5, Inf), 
            labels = c(0, 1, 2, 3, 4)))
           )

str(df_res)
#'data.frame':  33 obs. of  4 variables:
# $ T4.1: Factor w/ 3 levels "0","1","2": 1 1 1 1 1 1 1 2 2 1 ...
# $ T4.2: Factor w/ 5 levels "0","1","2","3",..: 5 3 2 2 2 2 3 4 3 4 ...
# $ T4.3: Factor w/ 1 level "0": 1 1 1 1 1 1 1 1 1 1 ...
# $ T4.4: Factor w/ 4 levels "0","1","2","4": 3 1 1 1 1 1 1 1 2 1 ...

df_res
#    T4.1 T4.2 T4.3 T4.4
# 1     0    4    0    2
# 2     0    2    0    0
# 3     0    1    0    0
# 4     0    1    0    0
# 5     0    1    0    0
# 6     0    1    0    0
# 7     0    2    0    0
# 8     1    3    0    0
# 9     1    2    0    1
# 10    0    3    0    0
# 11    0    1    0    0
# 12    0    4    0    4
# 13    1    3    0    0
# 14    1    2    0    0
# 15    1    3    0    1
# 16    0    4    0    0
# 17    0    0    0    0
# 18    2    2    0    0
# 19    1    3    0    0
# 20    0    4    0    2
# 21    1    0    0    0
# 22    0    4    0    0
# 23    0    1    0    0
# 24    0    1    0    0
# 25    2    2    0    1
# 26    1    2    0    0
# 27    0    4    0    1
# 28    0    2    0    0
# 29    0    2    0    0
# 30    0    4    0    2
# 31    1    3    0    0
# 32    0    3    0    2
# 33    2    1    0    1

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章