我有以下数据框。
sub1=c("2021","2121","M123","M143")
x1=c(10,5,6,7)
x2=c(11,12,34,56)
data=data.frame(sub1,x1,x2)
我需要为此数据帧创建一个组变量,以便如果sub1从数字2开始,则它将属于一个组,如果sub1从字母M开始,则它属于第二组。
我想要的输出应该是这样的,
sub1 x1 x2 group
1 2021 10 11 1
2 2121 5 12 1
3 M123 6 34 2
4 M143 7 56 2
有人可以建议我为此使用的任何功能吗?我尝试了如下的 grep 功能,但是没有得到想要的结果。
data$sub1[grep("^[2].*", data$sub1)]
谢谢
答案 0 :(得分:2)
那呢:
data$group <- ifelse(substr(data$sub1,1,1)==2,1,2)
data
sub1 x1 x2 group
1 2021 10 11 1
2 2121 5 12 1
3 M123 6 34 2
4 M143 7 56 2
如果您不知道是否是2
或M
以外的其他情况:
ifelse(substr(data$sub1,1,1)==2,1,ifelse(substr(data$sub1,1,1)=='M',2,'Missing'))
答案 1 :(得分:1)
使用子字符串和索引分配组的另一种方法。
data$group <- (substr(data$sub1, 1, 1) == "M") + 1
data
# sub1 x1 x2 group
#1 2021 10 11 1
#2 2121 5 12 1
#3 M123 6 34 2
#4 M143 7 56 2
或使用正则表达式提取第一个字符
sub("(.).*", "\\1", data$sub1)
#[1] "2" "2" "M" "M"
然后使用相同的方法分配组
(sub("(.).*", "\\1", data$sub1) == "M") + 1
#[1] 1 1 2 2
答案 2 :(得分:1)
您也可以这样做:
as.integer(!grepl("^2", data$sub1)) + 1
[1] 1 1 2 2