Репликация строки символов До определенной точки в R Dataframe - PullRequest
0 голосов
/ 17 мая 2018

У меня в настоящее время есть следующий кадр данных:

Country Information Export Import
Andorra Small       10     20  
        Medium      50     30  
        Large       40     50  
Total   NA          100    100     
Antigua Small       60     70
        Medium      20     10
        Large       5      10
        X-Large     15     10  
Total   NA          100    100    

Я хотел бы повторять название страны до тех пор, пока оно не достигнет строки символов «Всего», поэтому я бы повторил Андорру для строк в столбце$ Country до тех пор, пока не достигнет строки «Total»

Как видите, строки различаются практически для каждой страны (у меня их 252), поэтому мне нужно найти способ убедиться, что название страныповторяется для этой конкретной страны до тех пор, пока она не достигнет «всего» * ​​1006 *

(например, Антигуа имеет 4 строки, а не 3, как Андорра - поэтому потребуется повторить Антигуа 4 раза в столбце $ Страна)

Есть ли быстрый и эффективный способ сделать это?

Любая помощь приветствуется.

Спасибо

Ответы [ 2 ]

0 голосов
/ 17 мая 2018

Я бы использовал функцию заполнения из пакета tidyr

Входные данные

df <- data.table::fread("Country    Information Export  Import
Andorra Small   10  20
NA  Medium  50  30
NA  Large   40  50
Total   NA  100 100
Antigua Small   60  70
NA  Medium  20  10
NA  Large   5   10
NA  X-Large 15  10
Total   NA  100 100")

Код для заполнения недостающей информации с использованием заполнения из тидира

library(tidyr)
fill(df, Country, .direction = "down")

выход

   Country Information Export Import
1: Andorra       Small     10     20
2: Andorra      Medium     50     30
3: Andorra       Large     40     50
4:   Total        <NA>    100    100
5: Antigua       Small     60     70
6: Antigua      Medium     20     10
7: Antigua       Large      5     10
8: Antigua     X-Large     15     10
9:   Total        <NA>    100    100

Если есть строковые значения нулевой длины, вместо NA, вы можете использовать функцию na_if из пакета dplyr, чтобы изменить их на NA

library(dplyr)

df %>% 
  mutate(Country = na_if(Country,"")) %>% 
  fill(Country, .direction = "down")
0 голосов
/ 17 мая 2018

Я предполагаю, что у вас есть NA значения, а не пустые значения в тех случаях, когда отсутствуют значения country.

Вам необходимо использовать функцию na.locf из пакета zoo и применить еев вашем столбце country, например:

library(zoo)

# example of column values
country = c("Andorra",NA,NA,"Total","Antigua",NA,NA,NA,"Total")

# apply fucntion and update your variable
country = na.locf(country)

# see updated values
country
# [1] "Andorra" "Andorra" "Andorra" "Total"   "Antigua" "Antigua" "Antigua" "Antigua" "Total" 

Он заменяет значения NA на предыдущее значение, отличное от NA.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...