我有一个像这样的 Big Data 框

library(tidyverse)
df <- tibble(fruits=c("apple","banana","ananas"),
             col1=c(4,NA,NA),
             col2=c(5,NA,10),
             col3=c(10,100,5),
             col4=c(20,4,1))
df
#> # A tibble: 3 × 5
#>   fruits  col1  col2  col3  col4
#>   <chr>  <dbl> <dbl> <dbl> <dbl>
#> 1 apple      4     5    10    20
#> 2 banana    NA    NA   100     4
#> 3 ananas    NA    10     5     1

reprex package(v2.0.1)于2022-03-13创建

当只有col1的NA值时,我想用行的最后一个非NA值填充NA,并将值返回到NA.

我希望我的数据看起来像这样.

#> # A tibble: 3 × 5
#>   fruits  col1  col2  col3  col4
#>   <chr>  <dbl> <dbl> <dbl> <dbl>
#> 1 apple      4     5    10    20
#> 2 banana    100   NA    NA     4
#> 3 ananas    10    NA     5     1

推荐答案

如果是 Big Data .框架,使用矢量化解决方案可能比在行上循环更有效.获取'col1'中NA('i1')元素的逻辑索引,使用max.col返回第3列到第5列('j1')中first个非NA元素的列索引,创建带cbind的行/列索引矩阵(m1),使用"m1"从3到5列中提取的元素分配缺少值的"col1",并将这些元素分配到NA

df1 <- as.data.frame(df)
i1 <- is.na(df1$col1)
j1 <- max.col(!is.na(df1[3:5]), "first")
m1 <- cbind(which(i1), j1[i1])
df1$col1[i1] <- df1[3:5][m1]
df1[3:5][m1] <- NA

-输出

> df1
  fruits col1 col2 col3 col4
1  apple    4    5   10   20
2 banana  100   NA   NA    4
3 ananas   10   NA    5    1

R相关问答推荐

从R中的地址提取街道名称

使用gsim删除特殊词

有没有一种方法可以在子包上使用‘library()’中的‘exclub’参数?

在ubuntu 22.04上更新到R4.4后包安装出现编译错误

给定R中另一行中的值,如何插补缺失值

R:更新后无法运行控制台

在另一个函数中调用ggplot2美学

如何在ggplot中标记qqplot上的点?

在R中无法读入具有Readxl和lApply的数据集

如果可能,将数字列转换为整数,否则保留为数字

如何从R ggplot图片中获取SVG字符串?

将多列合并为单独的名称—值对

如何提取所有完美匹配的10个核苷酸在一个成对的匹配与生物字符串在R?>

如何在R forestplot中为多条垂直线分配唯一的 colored颜色 ?

根据列A中的差异变异列,其中行由列B中的相对值标识

如何基于两个条件从一列中提取行

按组计算列中1出现的间隔年数

将多个变量组合成宽格式

如何使用FormC使简单算术运算得到的数字是正确的?

以不同于绘图中元素的方式对GG图图例进行排序