基于R中的字符串值添加新列

基于R中的字符串值添加新列,r,grepl,R,Grepl,考虑数据集: activity <- c("play football", "basketball player", "guitar sono","cinema", "piano") country_and_type <- c("uk", "uk", "spain", "uk", "uk") dataset <- data.frame(activity, country_and_type) |activity |country_and_type | |pl

考虑数据集:

activity <- c("play football", "basketball player", "guitar sono","cinema", "piano")
country_and_type <- c("uk", "uk", "spain", "uk", "uk")
dataset <- data.frame(activity, country_and_type)

|activity         |country_and_type   |
|play football    |uk                 |
|basketball playe |uk                 |
|guitar sono      |spain              |
|cinema           |uk                 |
|piano            |uk                 |
你对如何制作有什么想法吗

dataset$type=NA
> dataset$type[grepl(paste(sport,collapse = "|"),a)]="sport"
> dataset$type[grepl(paste(music,collapse = "|"),a)]="music"
> dataset
                      a  type
1         play football sport
2     basketball player sport
3           guitar sono music
4          french piano music
5           ok handball sport
6         baseball game sport
7 microphone for singer music
>
编辑后:

> sp=grepl(paste(sport,".*uk",collapse = "|"),do.call(paste,dataset))
> ms=grepl(paste(music,".*uk",collapse = "|"),do.call(paste,dataset))
> uk=grepl("uk",do.call(paste,dataset))
> dataset$type=""
> dataset$type[sp]="(sport)"
> dataset$type[ms]="(music)"
> dataset$type[!(ms|sp)&uk]="(other)"
> transform(dataset,country_and_type=paste(country_and_type,type))[-3]
           activity country_and_type
1     play football       uk (sport)
2 basketball player       uk (sport)
3       guitar sono           spain 
4            cinema       uk (other)
5             piano       uk (music)

非常感谢您的回复,但我解释上下文时犯了一个错误。。。我错过了一个条件(如果初始数据集$country_和_类型值为“uk”);我编辑了我的问题。您好,我最近发现这个方法有一个错误:当数据集中的字符串包含grep中字符串的一部分时,列表的名称会受到影响。例如,“pianopolis”将与“piano”的价值相关联。输出中的关联值应为“其他”
dataset$type=NA
> dataset$type[grepl(paste(sport,collapse = "|"),a)]="sport"
> dataset$type[grepl(paste(music,collapse = "|"),a)]="music"
> dataset
                      a  type
1         play football sport
2     basketball player sport
3           guitar sono music
4          french piano music
5           ok handball sport
6         baseball game sport
7 microphone for singer music
>
> sp=grepl(paste(sport,".*uk",collapse = "|"),do.call(paste,dataset))
> ms=grepl(paste(music,".*uk",collapse = "|"),do.call(paste,dataset))
> uk=grepl("uk",do.call(paste,dataset))
> dataset$type=""
> dataset$type[sp]="(sport)"
> dataset$type[ms]="(music)"
> dataset$type[!(ms|sp)&uk]="(other)"
> transform(dataset,country_and_type=paste(country_and_type,type))[-3]
           activity country_and_type
1     play football       uk (sport)
2 basketball player       uk (sport)
3       guitar sono           spain 
4            cinema       uk (other)
5             piano       uk (music)