2016-02-22 18 views
0

我正在使用此代碼對四個行進行計數。但是當我的df包含NA時它不起作用。我該如何克服這一點?用NAs組對每個值進行計數

count <- sapply(split.default(df, 0:(length(df)-1) %/% 4), rowSums) 

通常rowSumsna.rm = TRUE但是當我試圖在這裏我得到這個:

Error in is.data.frame(x) : argument "x" is missing, with no default 

我嘗試了不同版本的lapply,sapply或申請,但沒有一個工作。我只是一個首發,所以它會很簡單,但我不能成功。

在此先感謝。

編輯: 小例子:

id <- 1:12 
b <- c(0,0,1,0,0,1,1,0,0,0,1,1) 
df <-data.frame(b,b,b,b,b,b,b,b,b,b,b) 
df$yeni <- sapply(split.default(df, 0:(length(df)-1) %/% 4), rowSums) 
# b b.1 b.2 b.3 b.4 b.5 b.6 b.7 b.8 b.9 b.10 yeni.0 yeni.1 yeni.2 
#1 0 0 0 0 0 0 0 0 0 0 0  0  0  0 
#2 0 0 0 0 0 0 0 0 0 0 0  0  0  0 
#3 1 1 1 1 1 1 1 1 1 1 1  4  4  3 
#4 0 0 0 0 0 0 0 0 0 0 0  0  0  0 
#5 0 0 0 0 0 0 0 0 0 0 0  0  0  0 
#6 1 1 1 1 1 1 1 1 1 1 1  4  4  3 
#7 1 1 1 1 1 1 1 1 1 1 1  4  4  3 
#8 0 0 0 0 0 0 0 0 0 0 0  0  0  0 
#9 0 0 0 0 0 0 0 0 0 0 0  0  0  0 
#10 0 0 0 0 0 0 0 0 0 0 0  0  0  0 
#11 1 1 1 1 1 1 1 1 1 1 1  4  4  3 
#12 1 1 1 1 1 1 1 1 1 1 1  4  4  3 

我的代碼不能正常工作時,我的數據集是這樣一個

d <- c(0,NA,1,0,0,1,1,0,0,0,1,1) 
df <-data.frame(b,b,b,b,b,b,b,b,b,b,b,d,d) 
+2

請顯示一個小的重現示例 – akrun

+0

當然,補充。 – ismailb

回答

1

我會讓df數組,然後使用rowSums

b <- c(0,0,1,0,0,1,1,0,0,0,1,1) 
d <- c(0,NA,1,0,0,1,1,0,0,0,1,1) 
df <-data.frame(b,b,b,b,b,b,b,b,b,b,b,d,d) 
#convert to matrix 
a <- as.matrix(df) 
#fill with NA values and convert to array 
i <- nrow(a) 
j <- ceiling(ncol(a)/4) 
length(a) <- i * j * 4 
dim(a) <- c(i, j, 4) 
#rearrange dimensions of array 
a <- aperm(a, c(1,3,2)) 
#calculate the sums 
rowSums(a, na.rm = TRUE, dims = 2) 
#  [,1] [,2] [,3] [,4] 
# [1,] 0 0 0 0 
# [2,] 0 0 0 0 
# [3,] 4 4 4 1 
# [4,] 0 0 0 0 
# [5,] 0 0 0 0 
# [6,] 4 4 4 1 
# [7,] 4 4 4 1 
# [8,] 0 0 0 0 
# [9,] 0 0 0 0 
#[10,] 0 0 0 0 
#[11,] 4 4 4 1 
#[12,] 4 4 4 1 
+0

問題是我的數據集在我的示例中不完全相同。例如,這裏有12列,但在實際數據集中有42,46或44.它可以改變。當我將它應用於我的數據集時,它只產生前12列的結果。 – ismailb

+1

@ismailb不,這個代碼動態地獲取列數(使用'ncol')。 – Roland

相關問題