Условно удалить средний символ строки - PullRequest
0 голосов
/ 03 мая 2019

Я подумал, что это будет простой поиск, но я не смог найти ответ. В основном у меня есть столбец из одного 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, то я мог бы легко заменить ноль только первым и третьим символом.

...