用R中不缺少的最后一个值替换向量中缺少的值

用R中不缺少的最后一个值替换向量中缺少的值,r,dataframe,missing-data,R,Dataframe,Missing Data,我试图使用readHtmlTable函数从网页导入一个表,这是数据在R中的前几行 Event Athlete Country Result Medal year 1 100m Men Tom Burke USA 12.0 GOLD 1896 2 Fritz Hofmann DEU 12.2 e

我试图使用readHtmlTable函数从网页导入一个表,这是数据在R中的前几行

              Event                Athlete Country      Result  Medal year
1          100m Men              Tom Burke     USA        12.0   GOLD 1896
2                            Fritz Hofmann     DEU   12.2 est. SILVER 1896
3                             Francis Lane     USA        12.6 BRONZE 1896
4                          Alajos Szokolyi     HUN   12.6 est. BRONZE 1896
5          400m Men              Tom Burke     USA        54.2   GOLD 1896
6                          Herbert Jamison     USA         n/a SILVER 1896
7                           Charles Gmelin     GBR         n/a BRONZE 1896
8          800m Men            Teddy Flack     AUS      2:11.0   GOLD 1896
9                            Nֳ¡ndor Dֳ¡ni     HUN 2:11.8 est. SILVER 1896
10                       Demitrios Golemis     GRE         n/a BRONZE 1896
现在,如果你看事件列,你可以看到事件字段的一些行是空的,这是网站上表格的方式,我要寻找的是填补这些空白的最有效的方式,所以最后应该是这样的

              Event       Athlete      Country      Result  Medal year
1          100m Men       Tom Burke       USA        12.0   GOLD 1896
2          100m Men       Fritz Hofmann   DEU   12.2 est. SILVER 1896
3          100m Men       Francis Lane    USA        12.6 BRONZE 1896
4          100m Men       Alajos Szokolyi HUN   12.6 est. BRONZE 1896
5          400m Men       Tom Burke       USA        54.2   GOLD 1896

基本上,每次事件列中的字段为空时,我都需要用最后一个非空值填充它。该列作为一个因子保存在R中,我知道从技术上讲,我可以使用for循环并遍历所有向量元素来实现这一点,但考虑到该表中大约有300000行的fat,这是非常耗时的。我希望有更有效的方法

这里有一个玩具示例,演示如何使用包来解决您的问题,假设数据位于
数据框中,缺少的值是
NA

library(purrr)

df <- data.frame("event" = c(1, NA, 2, NA, 3, NA, 5), "other" = 1:7)

df
#     event other
# 1     1     1
# 2    NA     2
# 3     2     3
# 4    NA     4
# 5     3     5
# 6    NA     6
# 7     5     7


df$event <- accumulate(.x = df$event, .f = function(x, y) { if(is.na(y)) x else y })

df
#     event other
# 1     1     1
# 2     1     2
# 3     2     3
# 4     2     4
# 5     3     5
# 6     3     6
# 7     5     7
库(purrr)

df假设数据位于
data.frame
中,缺少的值为
NA
,下面是一个玩具示例,说明如何使用包来解决问题:

library(purrr)

df <- data.frame("event" = c(1, NA, 2, NA, 3, NA, 5), "other" = 1:7)

df
#     event other
# 1     1     1
# 2    NA     2
# 3     2     3
# 4    NA     4
# 5     3     5
# 6    NA     6
# 7     5     7


df$event <- accumulate(.x = df$event, .f = function(x, y) { if(is.na(y)) x else y })

df
#     event other
# 1     1     1
# 2     1     2
# 3     2     3
# 4     2     4
# 5     3     5
# 6     3     6
# 7     5     7
库(purrr)

df这里是一个使用
rle
reverse.rle
的基本R方法:

# create run length encoding
temp <- rle(df$event)
# fill in missing values with previous values
temp$values[is.na(temp$values)] <- temp$values[which(is.na(temp$values))-1]

# fill in vector of data.frame
df$event <- inverse.rle(temp)
#创建运行长度编码

temp这里是一个使用
rle
inverse.rle
的基本R方法:

# create run length encoding
temp <- rle(df$event)
# fill in missing values with previous values
temp$values[is.na(temp$values)] <- temp$values[which(is.na(temp$values))-1]

# fill in vector of data.frame
df$event <- inverse.rle(temp)
#创建运行长度编码

tempR Studio包
tidyr
中的
fill
功能设计用于执行此类数据清理。我们将它与
dplyr
包中的
mutate
一起使用,该包将首先用
NA
替换缺少的值。您的数据位于数据框
df
中,代码如下所示

library(dplyr)
library(tidyr)
df_fill <- df %>% mutate(Event = ifelse(Event == "", NA,Event)) %>%
                  fill(Event)
库(dplyr)
图书馆(tidyr)
df_填充%mutate(事件=ifelse(事件==“”,NA,事件))%>%
填充(事件)

R Studio软件包
tidyr
中的
fill
功能设计用于执行此类数据清理。我们将它与
dplyr
包中的
mutate
一起使用,该包将首先用
NA
替换缺少的值。您的数据位于数据框
df
中,代码如下所示

library(dplyr)
library(tidyr)
df_fill <- df %>% mutate(Event = ifelse(Event == "", NA,Event)) %>%
                  fill(Event)
库(dplyr)
图书馆(tidyr)
df_填充%mutate(事件=ifelse(事件==“”,NA,事件))%>%
填充(事件)

用NA填充空白字段,然后使用zoo软件包中的
NA.locf
。参见
图书馆(动物园)?na.locf
获取帮助,谷歌搜索
na.locf
以查找更多示例。用na填充空字段,然后使用zoo软件包中的
na.locf
。参见
图书馆(动物园)?na.locf
以获取帮助,google以
na.locf
查找更多示例。