【发布时间】:2025-12-07 15:10:03
【问题描述】:
我有一个包含值和 NA 的数据框。其中一些具有行首的 NA,其中一些具有行尾的 NA。
# like this way
df<- data.frame(A=c(1,5,6, 1,NA,NA),
B=c(1,2,3, 2,NA,NA),
C=c(1,3,NA, 4,3,NA),
D=c(1,1,NA, 6,10,NA),
E=c(1,NA,NA, 1,1,1),
F=c(1,NA,NA, 1,1,1))
现在我想根据非 NA 值为每一行构建两个 bin 并将它们相加。
#expected output
Sum Bin
3 1
3 2
7 1
5 2
6 1
3 2
...
现在我所做的是我首先根据行是以 NA 开头还是结尾将数据框分成 2 个。然后我使用循环进行计算。
df_bin <- data.frame(Sum = 0, Bin = 0)
bin = 2 # set bin for the calculation
for (i in 1:nrow(df)) {
l <- sum(!is.na(df[i,]))
ll <- as.integer(l/bin)
s <- c()
j <- 1
while (j <= (bin-1)) {
k <- sum(df[i,(j*ll-ll+1):(j*ll)])
s <- c(s,k)
j = j+1
}
k <- k <- sum(df[i,(j*(bin-1)+1):l])
s <- c(s,k)
df2 <- data.frame(Sum = s, Bin = 1:bin)
df_bin <- rbind(df_bin,df2)
}
但是它运行得很慢,我想知道是否有更优雅的方式来做到这一点。提前谢谢你:)
【问题讨论】:
-
我对你如何计算你想要的输出感到困惑......你能解释一下
Sum和Bin的计算是如何完成的(按行)? -
@Wimpel 是的,我为每一行计算 Bin 中的列总和