【问题标题】:cbind new column based on valuescbind 基于值的新列
【发布时间】:2018-08-06 03:27:02
【问题描述】:

我的数据是:

 try<-data.frame(Gender=c("Male","Male","Female","Male","Female","Male","Female","Female","Male","Male", "Female","Male","Male","Male", "Male"), 
            Est=c(0.9956, 1.035, 2.0731, 0.0824, 3.0987, 5.0982, 6.0707, 5.0393, 2.7046, 4.0783, 0, 2.0923, 4.2348, 1.9561, 6.9262))

我需要再添加一列来将 Est 值重新编码为:

    Gender    Est    X
 1    Male 0.9956    0
 2    Male 1.0350    1
 3  Female 2.0731    2
 4    Male 0.9824    0
 5  Female 3.0987    3
 6    Male 5.0982    5
 7  Female 6.0707    6
 8  Female 5.0393    5
 9    Male 2.7046    2
 10   Male 4.0783    4
 11 Female 0.0000    0
 12   Male 2.0923    2
 13   Male 4.2348    4
 14   Male 1.9561    1
 15   Male 6.9262    6

其中 (0,1]=0, (1,2]=1, (2,3]=2, (3,4]=3, (4,5]=4, (5,6]= 5, (6,7]=6.

【问题讨论】:

  • try$X &lt;- floor(try$Est)
  • 您可以按照上面的建议使用floor 或使用trunc
  • 如果我想更改间隔并尝试使其更具动态性,有什么建议吗?例如,如果我使用区间 (0,2]=0, (2,4]=2, (4,6]=4 或 (0,3]=0, (3,6]=3
  • 在这种情况下,您可以使用我的代码并将中断和标签中的新间隔指定为:try$X = cut(x = try$Est,breaks = c(0,2,4,6),labels = c(0,2,4),right = TRUE,include.lowest = TRUE)`
  • 使用数学 (floor(try$Est / 2) * 2) 或 cut,但请注意,后者会返回一个您希望使用 as.numeric(as.character(cut(try$Est, ...))) 强制返回为数字的因子

标签: r cbind recode


【解决方案1】:

cut 将 x 的范围划分为多个区间,并根据它们所在的区间对 x 中的值进行编码。

正如@alistaire 所说,cut 的输出是一个因素。因此,您可能希望使用 as.numeric(as.character(cut(try$X ....))) 将其转换回数字

try$X = cut(x = try$Est,breaks = c(0,1,2,3,4,5,6,7),labels = c(0,1,2,3,4,5,6),right = TRUE,include.lowest = TRUE)

【讨论】:

  • 感谢您提供此代码 sn-p,它可能会提供一些有限的即时帮助。 proper explanation 将通过展示为什么这是解决问题的好方法,并使其对有其他类似问题的未来读者更有用,从而大大提高其长期价值。请edit您的回答添加一些解释,包括您所做的假设。
猜你喜欢
  • 1970-01-01
  • 2022-08-11
  • 2019-09-10
  • 2023-02-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多