gpt4 book ai didi

删除前导 NA 以对齐数据

转载 作者:行者123 更新时间:2023-12-03 23:28:03 26 4
gpt4 key购买 nike

我有一个大 data.frame使用“交错”数据并希望将其对齐。我的意思是我想接受类似的东西

enter image description here

并从所有列中删除前导(顶部)NA 以获得

enter image description here

我知道 na.trim来自 zoo 的函数包,但这对初始 data.frame 都不起作用以上介绍或其转置。为此,我使用了转置数据帧 t.df ,

t.df <- na.trim(t.df, sides = 'left')

这仅返回一个空的 data.frame ,无论如何都不会以我想要的方式工作,因为它会创建不同长度的向量。任何人都可以向我指出可能更有帮助的包或功能吗?

这是我上面使用的示例的代码:
# example of what I have

var1 <- c(1,2,3,4,5,6,7,8,9,10)
var2 <- c(6,2,4,7,3,NA,NA,NA,NA,NA)
var3 <- c(NA,NA,8,6,3,7,NA,NA,NA,NA)
var4 <- c(NA,NA,NA,NA,5,NA,2,6,2,9)

df <- data.frame(var1, var2, var3, var4)


# transpose and (unsuccessful) attempt to remove leading NAs

t.df <- t(df)

t.df <- na.trim(t.df, sides = 'left')

最佳答案

我们可以遍历列( lapply(.. )并应用 na.trim .然后,在每个 list 的末尾填充 NAs元素通过分配 length作为 list 的最大长度元素。

library(zoo)
lst <- lapply(df, na.trim)
df[] <- lapply(lst, `length<-`, max(lengths(lst)))
df
# var1 var2 var3 var4
#1 1 6 8 5
#2 2 2 6 NA
## 3 4 3 2
#4 4 7 7 6
#5 5 3 NA 2
#6 6 NA NA 9
#7 7 NA NA NA
#8 8 NA NA NA
#9 9 NA NA NA
#10 10 NA NA NA

或者正如评论中提到的@G.Grothendieck
replace(df, TRUE, do.call("merge", lapply(lst, zoo)))

关于删除前导 NA 以对齐数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36639599/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com