R 如果列b包含条件字符串,则更改列a的值

R 如果列b包含条件字符串,则更改列a的值,r,replace,match,grepl,R,Replace,Match,Grepl,这个问题给我带来了很多麻烦,尽管它应该尽快解决。我有一个列id和海报的数据集。如果id值包含某个字符串,我想更改海报的值。见以下数据: 测试 id poster 143537222999_2054 Kevin 143115551234_2049 Dave 14334_5334 Eric 1456322_4334 Mandy 143115551234_445633 Patrick 143115551234_432

这个问题给我带来了很多麻烦,尽管它应该尽快解决。我有一个列id和海报的数据集。如果id值包含某个字符串,我想更改海报的值。见以下数据:

测试

id                   poster
143537222999_2054    Kevin
143115551234_2049    Dave
14334_5334           Eric
1456322_4334         Mandy
143115551234_445633  Patrick
143115551234_4321    Lars
143537222999_56743   Iris
id                   poster
143537222999_2054    User
143115551234_2049    User
14334_5334           Eric
1456322_4334         Mandy
143115551234_445633  User
143115551234_4321    User
143537222999_56743   User
我想去

测试

id                   poster
143537222999_2054    Kevin
143115551234_2049    Dave
14334_5334           Eric
1456322_4334         Mandy
143115551234_445633  Patrick
143115551234_4321    Lars
143537222999_56743   Iris
id                   poster
143537222999_2054    User
143115551234_2049    User
14334_5334           Eric
1456322_4334         Mandy
143115551234_445633  User
143115551234_4321    User
143537222999_56743   User
这两列都是字符。如果id值包含“14353722999”或“1431155551234”,我想将海报的值更改为“User”。我尝试了以下代码:

在/其中匹配

test_df <- within(test_df, poster[match('143115551234', test_df$id) | match('143537222999', test_df$id)] <- 'User')
Grepl

test_df[grepl("143115551234", id | "143537222999", id), poster := "User"]
此代码引发错误:

Error in `[<-.data.frame`(`*tmp*`, match(id, test_df, "143115551234") |  : 
  missing values are not allowed in subscripted assignments of data frames
In addition: Warning messages:
1: In match(id, test_df, "143115551234") :
  NAs introduced by coercion to integer range
2: In match(id, test_df, "143537222999") :
  NAs introduced by coercion to integer range
Error in `:=`(poster, "User") : could not find function ":="
我不确定修复这个错误的最佳方法是什么,我尝试了多个变量,并不断遇到不同的错误


在此之前,我尝试了多个答案,但仍无法修复某些错误。

使用
grepl
ifelse

df$poster <- ifelse(grepl("143537222999|143115551234", df$id), "User", df$poster)

df$poster您可以使用
grepl
进行尝试

df[grepl('143115551234|143537222999', df$id),"poster"] <- "User"
df[grepl('14311551234 | 14353722999',df$id),“poster”]df[grepl('14311551234 | 14353722999',df$id),“poster”]df
身份证海报
1 14353722999_2054用户
2 14311551234_2049用户
314334_5334埃里克
4 1456322_4334曼迪
5 14311551234_445633用户
6 14311551234_4321用户
7 14353722999_56743用户

这个答案也适用,谢谢!看起来我的语法错了。
df[grepl('143115551234|143537222999', df$id),"poster"] <- "User"
> df[grepl('143115551234|143537222999', df$id),"poster"] <- "User"
> df
                   id poster
1   143537222999_2054   User
2   143115551234_2049   User
3          14334_5334   Eric
4        1456322_4334  Mandy
5 143115551234_445633   User
6   143115551234_4321   User
7  143537222999_56743   User