我在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)?
非常感谢。
答案 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)