R找到并创建索引" 1"或" 0"

时间:2016-03-01 05:16:36

标签: r

我在R中有一个数据框,其中包含一个名为H的列:

  H    Index
  11
  11
  11
  11
  12
  12
  12
  13
  13
  14
  14
  15
  15
  15
  16
  17
  18
  19
  20
  20
  20
  21
  22
  23
  00
  00
  00
  01
  01
  02
  03
  04
  04
  04
  04
  05
  06
  07
  07
  07
  08
  09
  09
  09
  10
  11
  12

如何创建一个填充1的新列,范围从10到18(eq,10,11,12,13,14,15,16,17和18),并且从19到0填充0 09(eq,19,20,21,22,23,00,01,02,03,04,05,06,07,08和09)?

非常感谢。

2 个答案:

答案 0 :(得分:3)

这很简单,因为您需要基于范围的值。如果 df 是数据框,

df$H<19 & df$H>9
如果值在10到18的范围内,

将为您提供真/假测试的向量。使用 as.integer 函数,您可以将其强制转换为1和0。 1

df$Index <- as.integer(df$H<19 & df$H>9)

如果列是字符向量,我们可以在进行测试之前首先转换为数值

df$Index <- as.integer( as.integer(df$H)<19 & as.integer(df$H)>9)

如果该值不是整数,我们可以使用 as.numeric 代替内部强制转换。

1 这是有效的,因为根据help(logical) True 被强制为1而 False 在数值上下文中调用时被强制为0, as.integer 将遵循这些强制规则。我们也可以使用 ifelse 函数手动完成此强制,ifelse(df$H<19&df$H>9,1,0)检查此逻辑向量中的每个元素,如果为真则使用1,如果为假,则使用0。

答案 1 :(得分:3)

我们也可以

df$Index <- +(df$H<19 & df$H>9)

ifelse

df$Index <- ifelse(df$H < 19 & df$H >9, 1, 0)

如果&#39; H&#39;列为character,我们将其转换为numeric

 df$H <- as.numeric(df$H)

或者如果是factor

 df$H <- as.numeric(as.character(df$H))

然后执行上述操作

 df$Index <- +(df$H < 19 & df$H >9)