R 将NA追加到列表中
我有以下清单:R 将NA追加到列表中,r,list,append,R,List,Append,我有以下清单: list<-list(c(0.295017919325516, 0.280103991013988, 0.240898624596022, 0.199677069304782, 0.173637393108632, 0.222134859203746, 0.39823944169409, 0.391882741855366, 0.21577600728402), c(0.28121757181295, 0.277422184992648, 0.230017887789
list<-list(c(0.295017919325516, 0.280103991013988, 0.240898624596022,
0.199677069304782, 0.173637393108632, 0.222134859203746, 0.39823944169409,
0.391882741855366, 0.21577600728402), c(0.28121757181295, 0.277422184992648,
0.230017887789819, 0.191847488360009, 0.17455140669152, 0.205591186569629,
0.4063428966179, 0.429863712702859, 0.248064462722642), c(0.271557391953248,
0.294647273450576, 0.259500615962201, 0.248402892690127, 0.178084892253651,
0.215066463654523, 0.40516205719907, 0.27382824544534), c(0.260821771231842,
0.260253867737171, 0.264572075610469, 0.175500821018062, 0.181187522322482,
0.197811527945056, 0.393032174562975, 0.336606928254994), c(0.274566347073192,
0.271933284859567, 0.267972728722684, 0.211355730670407, 0.180921784930061,
0.185393876280435, 0.384058108716521, 0.374405949140189, 0.312466672989218
), c(0.282151980564761, 0.28721079361022, 0.31787138268144, 0.24739190298477,
0.186615966111228, 0.158811690362167, 0.395599896385276, 0.386374201627084,
0.297715499076704))
但它给出了错误的结果
核心问题是
append(list[[1]],NA,after=list[[1]][7])
给予
虽然我希望是这样
[1] 0.2950179 0.2950179 0.2801040 0.2408986 0.1996771 0.1736374 0.2221349 NA
[9] 0.3982394 0.3918827
我不明白为什么。如果我理解正确,您希望替换第7个元素。。。如果是,则替换列表中每个向量的第7个元素的代码为:
for (i in length(list){
if (length(list[[i]]) < 9){
list[[i]][7]<-NA
}
}
for(长度为i)(列表){
如果(长度(列表[[i]])<9){
列表[[i]][7]这里是一个基本的R方法
list[lengths(list) < 9] <- lapply(list[lengths(list) < 9], function(x){
n <- length(x)
y <- c(x[seq_len(min(n, 7))], NA)
if(n > 7) c(y, x[(7 + 1):n]) else y
})
list[3:4]
#[[1]]
#[1] 0.2715574 0.2946473 0.2595006 0.2484029 0.1780849 0.2150665 0.4051621
#[8] NA 0.2738282
#
#[[2]]
#[1] 0.2608218 0.2602539 0.2645721 0.1755008 0.1811875 0.1978115 0.3930322
#[8] NA 0.3366069
list[length(list)<9]只需使用which
查找太短的列表项,并在lappy
中使用append
插入您的NA
值:
ind <- which(lengths(L) < 9)
if (any(ind)) L[ind] <- lapply(L[ind], append, NA, after = 7)
L
# [[1]]
# [1] 0.2950179 0.2801040 0.2408986 0.1996771 0.1736374 0.2221349 0.3982394
# [8] 0.3918827 0.2157760
#
# [[2]]
# [1] 0.2812176 0.2774222 0.2300179 0.1918475 0.1745514 0.2055912 0.4063429
# [8] 0.4298637 0.2480645
#
# [[3]]
# [1] 0.2715574 0.2946473 0.2595006 0.2484029 0.1780849 0.2150665 0.4051621
# [8] NA 0.2738282
#
# [[4]]
# [1] 0.2608218 0.2602539 0.2645721 0.1755008 0.1811875 0.1978115 0.3930322
# [8] NA 0.3366069
# ...
ind在您的示例预期输出中,您显示的是一个长度为10的向量,但您的描述说您希望它们都是9。此外,您是否需要替换多个值?谢谢,但我想在第7个元素之后添加一个元素,而不是替换它。谢谢!它可以工作,顺便问一句,您知道append()的位置吗
问题来自于?@grouah它来自于对之后的的错误使用,它是x
的索引,不是要追加的值。请查看之后的=list[[1]][7]
的值是0.3…
。然后在帮助('append')中运行该示例
。巧合的是,after=3
。如果更改为after=0.3
,您将看到相同的行为,它将转到1
(在R中,索引是基于1的)然后追加向量0:1
,然后从1
开始追加x
的其余部分。这是一种奇怪但预期的行为。非常好的解决方案!谢谢。你知道为什么append()
在我的情况下不起作用吗?@grouah,你应该使用after=7
。你的循环也应该从改为(i长度(列表))
到for(i顺序(列表))
。例如:for(i顺序(列表)){if(长度(列表[[i]])<9{list[[i]]
list[lengths(list) < 9] <- lapply(list[lengths(list) < 9], function(x){
n <- length(x)
y <- c(x[seq_len(min(n, 7))], NA)
if(n > 7) c(y, x[(7 + 1):n]) else y
})
list[3:4]
#[[1]]
#[1] 0.2715574 0.2946473 0.2595006 0.2484029 0.1780849 0.2150665 0.4051621
#[8] NA 0.2738282
#
#[[2]]
#[1] 0.2608218 0.2602539 0.2645721 0.1755008 0.1811875 0.1978115 0.3930322
#[8] NA 0.3366069
list[lengths(list) < 9] <- lapply(list[lengths(list) < 9], function(x){
n <- length(x)
i <- seq_len(min(n, 7))
j <- seq_len(n)[-i]
c(x[i], NA, x[j])
})
ind <- which(lengths(L) < 9)
if (any(ind)) L[ind] <- lapply(L[ind], append, NA, after = 7)
L
# [[1]]
# [1] 0.2950179 0.2801040 0.2408986 0.1996771 0.1736374 0.2221349 0.3982394
# [8] 0.3918827 0.2157760
#
# [[2]]
# [1] 0.2812176 0.2774222 0.2300179 0.1918475 0.1745514 0.2055912 0.4063429
# [8] 0.4298637 0.2480645
#
# [[3]]
# [1] 0.2715574 0.2946473 0.2595006 0.2484029 0.1780849 0.2150665 0.4051621
# [8] NA 0.2738282
#
# [[4]]
# [1] 0.2608218 0.2602539 0.2645721 0.1755008 0.1811875 0.1978115 0.3930322
# [8] NA 0.3366069
# ...