我的数据:

    structure(list(col1 = 1:6, col2 = c(NA, NA, 3L, 4L, 5L, 6L), 
    col3 = c(1L, 1L, NA, 1L, NA, 1L), col4 = c(2L, 2L, 2L, 2L, 
    NA, 2L), col5 = c(3L, 3L, 3L, NA, 3L, 3L), GROUP = c(1L, 
    1L, 1L, 2L, 2L, 2L)), class = "data.frame", row.names = c(NA, -6L))

我想得到一个新的日期框,如果出现NA,那么用组合list(c(1,2),c(3,4,5))中的NA替换整行.

我想要的是:

data= structure(list(col1 = c(NA, NA, 3L, 4L, 5L, 6L), col2 = c(NA, 
NA, 3L, 4L, 5L, 6L), col3 = c(1L, 1L, NA, NA, NA, 1L), col4 = c(2L, 
2L, NA, NA, NA, 2L), col5 = c(3L, 3L, NA, NA, NA, 3L), GROUP = c(1L, 
1L, 1L, 2L, 2L, 2L)), class = "data.frame", row.names = c(NA, 
-6L))

更新:

list_v <- list(c(1,2),c(3,4,5))
data1 <- do.call(qpcR:::cbind.na, lapply(list_v, function(i)data[complete.cases(data[c(i)]),i]))

我不需要删除至少有一个NA的行,而是用至少有一个NA的NA替换其余元素

推荐答案

你可以做:

l <- lapply(list(c(1,2), c(3,4,5)), \(i) df[, i])

cbind.data.frame(lapply(l, \(y) t(apply(y, 1, \(x) {
  if(any(is.na(x))) x[1:length(x)] <- NA
  x
}))))

#  col1 col2 col3 col4 col5
#1   NA   NA    1    2    3
#2   NA   NA    1    2    3
#3    3    3   NA   NA   NA
#4    4    4   NA   NA   NA
#5    5    5   NA   NA   NA
#6    6    6    1    2    3

使用applyif else语句,可以执行以下操作:

t(apply(df, 1, function(x){
  if(any(is.na(x[1:2])))
    x[1:2] <- NA
  else if(any(is.na(x[3:5])))
    x[3:5] <- NA
  x
}))

#     col1 col2 col3 col4 col5 GROUP
#[1,]   NA   NA    1    2    3     1
#[2,]   NA   NA    1    2    3     1
#[3,]    3    3   NA   NA   NA     1
#[4,]    4    4   NA   NA   NA     2
#[5,]    5    5   NA   NA   NA     2
#[6,]    6    6    1    2    3     2

这里,applydf的每一行(MARGIN = 1)上重复一个函数(在第三个参数中定义).

R相关问答推荐

删除facet_wrap标签之间的水平线

向gggplot 2中的数据和轴标签添加大写和星号

如何利用模型函数在格图中添加双曲/指数曲线

将非重复序列高效转换为长格式

如何写一个R函数来旋转最后n分钟?

如果第一个列表中的元素等于第二个列表的元素,则替换为第三个列表的元素

如何使用列表中多个列表中的第一条记录创建数据框

使用data.table::fcase()而不是dplyr::case_When()时保持值

如何在R中平滑地绘制线图(不拟合)?

为什么在BASE R中绘制线条时会看到线上的点?

派生程序包| ;无法检索';return()';的正文

KM估计的差异:SvyKm与带权重的调查

根据另一列中的值和条件查找新列的值

R中Gamma回归模型均方误差的两种计算方法不一致

将数据集旋转到长格式,用于遵循特定名称模式的所有变量对

错误包arrowR:READ_PARQUET/OPEN_DATASET&QOT;无法反序列化SARIFT:TProtocolException:超出大小限制&Quot;

R基于变量组合创建新的指标列

Data.table::Shift type=允许扩展数据(&Q;LAG&Q;)

使用列名和r中的前缀 Select 列的CREATE函数

创建由三个单独的shapefile组成的单个 map