我的数据如下:
ID var1 var2
1 A 2
2 5 6
3 B 3
4 7 D
5 1 1
6 2 5
7 6 Y
8 7 G
9 8 C
Var1和var2的值为1~9,A~Z中的一个。我想要这样的二进制数据集。如果原始值为4-9,则新值= 1,否则新值= 0。
我如何从上面的数据二进制索引?
您可以使用%in%
运算符检查列中的每个值是否在目标集中:
as.numeric(dat$var1 %in% 4:9)
# [1] 0 1 0 1 0 0 1 1 1
as.numeric(dat$var2 %in% 4:9)
# [1] 0 1 0 0 0 1 0 0 0
即使你有字符数据,也没有必要使用像grep
这样的字符串函数——在R中"4" == 4
返回TRUE
。
我猜你想包括var1和var2。您可以使用返回TRUE或FALSE的grepl
。我称这个数据帧为df。|
是or
,因此如果4-9在var1或var2中,则返回TRUE。
df$New <- as.numeric((grepl("[4-9]", df$var1)) | (grepl("[4-9]", df$var2)))
或
library(stringr)
str_detect(as.character(interaction(dat[,-1])),"[4-9]")+0
#[1] 0 1 0 1 0 1 1 1 1