我目前有以下数据框:
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
我想重复国家名称,直到它到达字符串" Total",所以我会让安道尔在名为$ Country的列中重复行,直到它到达行#34 ;总"
正如你所看到的几乎每个国家的行都有所不同(我有252个)所以我需要找到一种方法来确保国家名称在特定国家/地区重复,直到达到"总计&# 34;
(例如,安提瓜有4行,而不是像安道尔一样 - 所以要求安提瓜在$ Country栏中重复4次)
有快速有效的方法吗?
感谢任何帮助。
谢谢
答案 0 :(得分:2)
我假设您在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
值。
答案 1 :(得分:1)
我会使用tidyr包中的fill函数
输入数据
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")
使用tidyr填充
填写缺失信息的代码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")