在数据框中通过从R中的某个值开始的字符串变量创建组变量

时间:2019-06-14 13:08:49

标签: r string

我有以下数据框。

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)]

谢谢

3 个答案:

答案 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

如果您不知道是否是2M以外的其他情况:

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