根据第二个行号列表将一个列表中的特定行分配为NA

BKV

这是一些模拟我的问题的代码。模拟数据具有相同的维度(74个主题,一个时间序列中的178个时间点,294个变量+ 8个令人讨厌的变量)

fulldata = lapply(1:74, function(i) matrix(rnorm(300,0,1), ncol=300,nrow=178))

rownumbers = seq(1:178)

badrows = lapply(1:74, function(i) sample(rownumbers, size=10, rownumbers,replace=FALSE))

现在我需要做的是用NA替换列表“ fulldata”中相应矩阵的列表坏行中每个向量中列出的行

这些时间点已损坏,将被插值。但是首先必须将不良值替换为NA。

这行不通。

lapply(1:74, function(l) lapply(1:74, function(l) fulldata[[l]][badrows[[l]],1:294]<-NA))

returns list that looks like this:

  [[74]][[72]]
  [1] NA

  [[74]][[73]]
  [1] NA

  [[74]][[74]]
  [1] NA

这也不起作用。

lapply(1:74, function(l) fulldata[[l]][badrows[[l]],1:294]<-NA)

Returns list that looks like this:
  [[72]]
  [1] NA

  [[73]]
  [1] NA

  [[74]]
  [1] NA

这只是返回NA的向量

sapply(1:74, function(i) fulldata[[i]][badrows[[i]],1:294] <- NA) 


[1] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
[34] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
[67] NA NA NA NA NA NA NA NA

我还尝试了mapply的一些操作,但是当R冻结时就失去了线条,不记得我到底做了什么。我期望输出是这样的,其中“坏行”被替换为NA,仅用于列1-294和295-300的返回值保持不变:

(无法使表格显示在此处,但仍然将其保留)

  | var1 | var2 | var3 | ........ | var295 | ..... | var300 |
  |------|------|------|----------|--------|-------|--------|
  | 3    | 1    | 5    | .......  | .72    | ..... | .23    |
  | NA   | NA   | NA   | ........ | .10    | ..... | .98    |
  | 5    | 7    | 12   | ........ | .42    | ..... | 1.2    |
生活

这是一种方法:

lapply(1:74, function(iii) "[<-"(fulldata[[iii]], badrows[[iii]],, NA))

相当于

mapply(function(x,y) "[<-"(x, y,, NA), fulldata, badrows, SIMPLIFY = FALSE) # without setting SIMPLIFY to FALSE you get one large matrix

mapply("[<-", fulldata, i=badrows, MoreArgs=alist(j=, value=NA), SIMPLIFY=FALSE)
# j=  # this corresponds to the empty second argument in [i,j]

上面的代码受以下事实困扰:子集分配返回的是分配的值,而不是整个对象。

 sapply(1:74, function(i) fulldata[[i]][badrows[[i]],1:294] <- NA) 
 #  does the same thing as ...
 sapply(1:74, function(i) NA) 

为了改善这一点,您可以使函数返回整个对象:

 sapply(1:74, function(i) {fulldata[[i]][badrows[[i]],1:294] <- NA; fulldata[[i]]}) 

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在两个列表上执行查找并根据条件将第二个列表中的元素添加到第一个列表

如何根据第二个索引列表重新排列一个列表

根据第二个列表的值对一个列表执行计算

根据Rails中的第一个选择列表值更改第二个选择列表

根据第一个下拉列表中的选择显示第二个下拉列表?

Python:根据第一个列表索引确定第二个列表中的值

根据 C# 中的前一个列表简化选择第二个列表

通过将第一个列表中的第一行项目与第二个列表中的项目进行比较来创建新列表

根据第一个下拉列表中的选定选项,使第二个下拉列表中的特定选项消失

将一个列表的元素多次映射到第二个列表的元素

从第二个列表中减去第一个列表中的元素

基于 R 中的第二个列表在一个列表中求和词频

从嵌套的第二个列表中的一个列表中查找元素

将第一个列表中的每个值与第二个列表配对

将列表中的行添加到第二个列表Powershell中的行

根据第二个文件中的特定值选择一个文件中的行

将数据列表从一个屏幕传递到第二个屏幕

在两个列表中,如何根据第一个列表值获取第二个列表的值?

查找第一个值并返回列表中的第二个值

打印列表中的第一个,第二个出现的字符

jQuery根据第一个下拉列表显示/排序第二个下拉列表?

根据第一个多选下拉列表更新第二个多选下拉列表

根据列数有限的第二个列表的内容来编辑一个列表的内容

AngularJS:根据第一个选择下拉列表的选择填充第二个选择下拉列表

如何根据第一个列表的索引重新排序第二个列表?

列表的Python扩展方法将第一个列表的元素分解为第二个列表的元素

当它们的长度不相等时,如何将一个列表的值分配给第二个列表的值?

当尝试将一个数字范围放入两个列表时,第二个列表为空

比较Linq中的CSV值列表,以将第二个列表中的CSV值与第一个列表中的任何值进行匹配