有条件地删除字符串的中间字符

时间:2019-05-02 21:17:02

标签: r regex substr

我认为这将是一个简单的搜索,但是我一直找不到答案。基本上,我有一个来自dataframe的列,该列包含第一个和第三个字符之间不带零的字符(例如“ A1” ),但是我的另一个dataframe包含相同的变量,但中间有一个毫无意义的“零”(例如“ A01” )。

我想要rbind,但需要这些character类值相同。我认为我需要一个ifelse语句,因为该列中还有其他变量包含第二个字符(尽管不是零)。

示例数据

# Dataframe with no zeroes between the characters in column_A
set.seed(123)
df_nozero <- data.frame(column_A = c(rep("A1",5),rep("B10",5)), 
                        column_B = sample(0:100,10),stringsAsFactors = FALSE)
print(df_nozero)

   column_A column_B
1        A1       29
2        A1       78
3        A1       40
4        A1       86
5        A1       91
6       B10        4
7       B10       50
8       B10       83
9       B10       51
10      B10       42

# Dataframe with zeroes between the characters in column_A
set.seed(123)
df_zero <- data.frame(column_A =  c(rep("A01",5),rep("B10",5)),
                      column_B = sample(0:50,5), stringsAsFactors = FALSE)
print(df_zero)

   column_A column_B
1       A01       14
2       A01       39
3       A01       20
4       A01       42
5       A01       44
6       B10       14
7       B10       39
8       B10       20
9       B10       42
10      B10       44

所需的输出

   column_A column_B
1        A1       29
2        A1       78
3        A1       40
4        A1       86
5        A1       91
6       B10        4
7       B10       50
8       B10       83
9       B10       51
10      B10       42
11       A1       14
12       A1       39
13       A1       20
14       A1       42
15       A1       44
16      B10       14
17      B10       39
18      B10       20
19      B10       42
20      B10       44

尝试失败

df_corrected <- df_zero
df_corrected$column_A <- ifelse(substr(df_corrected$column_A,2,2)=="0","",df_corrected$column_A)
print(df_corrected)

   column_A column_B
1                 14
2                 39
3                 20
4                 42
5                 44
6       B10       14
7       B10       39
8       B10       20
9       B10       42
10      B10       44

df_corrected$column_A <- ifelse(substr(df_corrected$column_A,2,2)=="0",substr(df_corrected$column_A,1,3),df_corrected$column_A)
print(df_corrected)

   column_A column_B
1       A01       14
2       A01       39
3       A01       20
4       A01       42
5       A01       44
6       B10       14
7       B10       39
8       B10       20
9       B10       42
10      B10       44

如果有一种方法只能选择column_A中的第一个和第三个字符,那么我可以很容易地仅用第一个和第三个字符替换零。

0 个答案:

没有答案