用R中不缺少的最后一个值替换向量中缺少的值
我试图使用readHtmlTable函数从网页导入一个表,这是数据在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
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
查找更多示例。