我正在尝试使用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
基本上每当Event列中的一个字段为空时,我需要用最后一个非空的值填充它。该列保存在R中作为一个因素,我知道技术上我可以使用for循环并遍历所有向量元素,但考虑到此表中有大约300000行的胖,这是非常耗时的。我希望有更高效的东西
答案 0 :(得分:1)
以下是purrr软件包如何用于解决您的问题的玩具示例,假设数据位于data.frame
且缺失值为NA
:< / p>
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
答案 1 :(得分:1)
R Studio包fill
中的tidyr
函数旨在执行此类数据清理。我们会将其与mutate
包中的dplyr
一起使用,该NA
包将首先用df
替换缺失值。您的数据位于数据框library(dplyr)
library(tidyr)
df_fill <- df %>% mutate(Event = ifelse(Event == "", NA,Event)) %>%
fill(Event)
代码中
q_changed
答案 2 :(得分:0)
以下是使用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)
请注意,如果变量的第一个位置缺少值,则不会起作用。