【发布时间】:2021-10-16 13:01:01
【问题描述】:
我有来自多个数组的数据。我想更改仅属于存在部分数据的数组的数据帧中的 NA。其他数据应保持 NA。我有一个 2 数组的示例,但它可以是多个数组。
data_frame = data.frame(
col1 = c(111,232,12,NA, NA, NA, NA, NA, NA, NA,NA,NA),
col2 = c(NA,NA,NA,4,50,800,NA,NA,NA,NA,NA,NA),
col3 = c(NA,NA,NA,NA,NA,NA,NA,NA,NA,20,3,500),
ARRAY = c(1,1,1,2,2,2,1,1,1,2,2,2))
所以,它应该看起来像在 col1 中替换了第 7-9 行中的 NA,在 col2 中替换了第 10-12 行中的 NA,在 col3 中第 4-6 行中......
我试图找出哪些行和列的数据与 which(!is.na(data_frame), arr.ind = TRUE) 但后来我卡住了。对于我有多个数组的任何脚本,这应该是通用的,并且只有在数组有部分数据时才想更改 NA。
顺序不应该改变,因为它需要放回一个大的数据框集。
经过一番尝试,我想出了这个:
for (j in 1:3){
A <- as.data.frame(df[,j])
NonNAindex <- which(!is.na(A))
NonNA <- min(NonNAindex)
ARRAY <- df[firstNonNA,ncol(df)]
for (r in 1:nrow(df)){
if (is.na(df[r,j]) & df[r,4]==ARRAY) {df[r,j] <- 0}
else{df[r,j] <- df[r,j]}
}
}
【问题讨论】:
标签: r dataframe grouping subset na