簡體   English   中英

如何計算 R 中前 2 個和后 2 個非 NA 的平均值?

[英]How to calculate mean of first 2 and last 2 non-NAs by row in R?

我正在計算數據集中某些行為項目的分半可靠性,首先需要獲取每個受訪者前 2 個非 NA 值的平均值,然后是每個人(每行)的最后兩個非 NA 值。 我知道有一些方法可以按列使用包runnerzoo和其他包來做到這一點,但我還沒有找到行內的解決方案。

對於上下文,我設計了一項調查,其中項目是隨機的,以減少項目級的影響。 參與者在調查的一個點看到了來自特定測量量表的隨機項目子集的 1/2,在不同的點看到了另外 1/2。 因此,在每個兩個時間點,每個參與者的非 NA 數量都將與 NA 相同。

例如,假設我總共有 8 件物品。 第 1 個人、第 2 個人和第 3 個人在時間點 1 的數據如下:

x1  x2  x3  x4  x5  x6  x7  x8
 1  NA  NA  2   NA  1   1   NA
 NA 4   3   3   NA  NA  4   NA
 3  2   1   NA  NA  NA  3   NA 

生成的新變量(avg1 和 avg2)應為:

x1  x2  x3  x4  x5  x6  x7  x8   avg1 avg2
 1  NA  NA  2   NA  1   1   NA   1.5   1
 NA 4   3   3   NA  NA  4   NA   3.5  3.5
 3  2   1   NA  NA  NA  3   NA   2.5   2

感謝任何幫助,謝謝!

這是一種可能的解決方案:

m <- as.matrix(read.table(text = "x1  x2  x3  x4  x5  x6  x7  x8
 1  NA  NA  2   NA  1   1   NA
 NA 4   3   3   NA  NA  4   NA
 3  2   1   NA  NA  NA  3   NA ",
 header = TRUE))

# Only keep non-NA values
m2 <- t(apply(m,1,function(x) c(x[!is.na(x)])))

# Select the first two non-NA values
m3 <- m2[,1:2]

# Select the second-last and last non-NA values
m4 <- m2[,(ncol(m2)-1):(ncol(m2))]

# Bind the matrix to the mean of the first two and the mean of the last two non-NA values
cbind(m, "avg1" = rowMeans(m3), "avg2" = rowMeans(m4))
#>      x1 x2 x3 x4 x5 x6 x7 x8 avg1 avg2
#> [1,]  1 NA NA  2 NA  1  1 NA  1.5  1.0
#> [2,] NA  4  3  3 NA NA  4 NA  3.5  3.5
#> [3,]  3  2  1 NA NA NA  3 NA  2.5  2.0

reprex package (v2.0.1) 創建於 2022-03-11

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM