R: sub() 使用向量作为模式
R: sub() using vector as pattern
假设我有一个如下所示的数据框:
df=data.frame(a=LETTERS, b=paste0(LETTERS,1:length(LETTERS)))
看起来像这样:
> df
a b
1 A A1
2 B B2
3 C C3
4 D D4
5 E E5
6 F F6
7 G G7
8 H H8
9 I I9
10 J J10
11 K K11
12 L L12
...
我唯一想做的就是从 df$b
中删除 df$a
,这样生成的数据框如下所示:
> df
a b
1 A 1
2 B 2
3 C 3
4 D 4
5 E 5
6 F 6
7 G 7
8 H 8
9 I 9
10 J 10
11 K 11
12 L 12
...
为此,我想明确地使用 sub()
和 df$a
作为模式。这个数据框只是一个例子,所以我不想在 sub()
中使用 strsplit()
或特定的正则表达式(因为我的 df$a
会变得非常复杂)。
我试试:
df$b=sub(paste0("^",df$a) , "", df$b)
但显然我得到:
Warning message: In sub(paste0("^", df$a), "", df$b) : argument
'pattern' has length > 1 and only the first element will be used
那么正确的做法是什么?谢谢!
使用 mapply
从 df$b
中删除 df1$a
。
df <- data.frame(a=LETTERS, b=paste0(LETTERS,1:length(LETTERS)))
mapply(\(x, y) sub(x, "", y), df$a, df$b)
#> A B C D E F G H I J K L M N O P
#> "1" "2" "3" "4" "5" "6" "7" "8" "9" "10" "11" "12" "13" "14" "15" "16"
#> Q R S T U V W X Y Z
#> "17" "18" "19" "20" "21" "22" "23" "24" "25" "26"
由 reprex package (v2.0.1)
于 2022-03-16 创建
要分配回 df$b
,保持字符,运行
df$b <- mapply(\(x, y) sub(x, "", y), df$a, df$b)
head(df)
#> a b
#> 1 A 1
#> 2 B 2
#> 3 C 3
#> 4 D 4
#> 5 E 5
#> 6 F 6
由 reprex package (v2.0.1)
于 2022-03-16 创建
假设我有一个如下所示的数据框:
df=data.frame(a=LETTERS, b=paste0(LETTERS,1:length(LETTERS)))
看起来像这样:
> df
a b
1 A A1
2 B B2
3 C C3
4 D D4
5 E E5
6 F F6
7 G G7
8 H H8
9 I I9
10 J J10
11 K K11
12 L L12
...
我唯一想做的就是从 df$b
中删除 df$a
,这样生成的数据框如下所示:
> df
a b
1 A 1
2 B 2
3 C 3
4 D 4
5 E 5
6 F 6
7 G 7
8 H 8
9 I 9
10 J 10
11 K 11
12 L 12
...
为此,我想明确地使用 sub()
和 df$a
作为模式。这个数据框只是一个例子,所以我不想在 sub()
中使用 strsplit()
或特定的正则表达式(因为我的 df$a
会变得非常复杂)。
我试试:
df$b=sub(paste0("^",df$a) , "", df$b)
但显然我得到:
Warning message: In sub(paste0("^", df$a), "", df$b) : argument 'pattern' has length > 1 and only the first element will be used
那么正确的做法是什么?谢谢!
使用 mapply
从 df$b
中删除 df1$a
。
df <- data.frame(a=LETTERS, b=paste0(LETTERS,1:length(LETTERS)))
mapply(\(x, y) sub(x, "", y), df$a, df$b)
#> A B C D E F G H I J K L M N O P
#> "1" "2" "3" "4" "5" "6" "7" "8" "9" "10" "11" "12" "13" "14" "15" "16"
#> Q R S T U V W X Y Z
#> "17" "18" "19" "20" "21" "22" "23" "24" "25" "26"
由 reprex package (v2.0.1)
于 2022-03-16 创建要分配回 df$b
,保持字符,运行
df$b <- mapply(\(x, y) sub(x, "", y), df$a, df$b)
head(df)
#> a b
#> 1 A 1
#> 2 B 2
#> 3 C 3
#> 4 D 4
#> 5 E 5
#> 6 F 6
由 reprex package (v2.0.1)
于 2022-03-16 创建