2015-05-19 159 views
0

儘管可能存在(我希望的),但是對於這個問題的簡單解決方案,我似乎無法得出結論。對於一系列配對的列,我想計算每個偶數列(df2,df4,df6)中唯一值的數量,該列在其左側對應列(df1,df3,df5)中具有零。計算相鄰列中零值的唯一值的數量

df1 <- as.data.frame(matrix(sample(0:1000, 36*10, replace=TRUE), ncol=1)) 
df2 <- as.data.frame(rep(1:12, each=30)) 
df3 <- as.data.frame(matrix(sample(0:500, 36*10, replace=TRUE), ncol=1)) 
df4 <- as.data.frame(c(rep(5:12, each=30),rep(1:4, each=30))) 
df5 <- as.data.frame(matrix(sample(0:200, 36*10, replace=TRUE), ncol=1)) 
df6 <- as.data.frame(c(rep(8:12, each=30),rep(1:7, each=30))) 
Example <- cbind(df1,df2,df3,df4,df5,df6) 

我可以通過此功能降低行至那些擁有零數,我不知道這是一個必要的步驟,但。

Example <- as.data.frame(Example[which(apply(Example[-1], 1, function(x) min(x) <= 0)),]) 

因此,作爲一個例子,如果我有數據幀...

df1 df2 df3 df4 df5 df6 
1 1 9 1 0 1 
0 2 5 2 0 2 

...我想輸出是

df2 df4 df6 
1 0 2 

預先感謝您。

+0

這是不可複製的:'對象' ntest'找不到'。 –

+0

您的示例輸出看起來是錯誤的,因爲'df2'具有_2_唯一值1和2. –

+0

道歉我編輯了代碼,我意外地應對並粘貼了最後一行。 df2確實有2個唯一值,但只有1個唯一值在左邊的相鄰列中擁有0。我希望現在更清楚抱歉。 –

回答

1

如果您data.frame是df,你可以這樣做:

colSums(df[, seq(ncol(df))%%2==1]==0) 
#df1 df3 df5 
# 1 0 2 

基本上,而不是搜索相鄰的0值,它計算在奇數列的0,但結果是一樣的。

如果你真的想要的列名對應於偶數列,你可以這樣做:

w_odd <- seq(ncol(df))%%2==1 
setNames(colSums(df[, w_odd]==0), colnames(df)[!w_odd]) 
#df2 df4 df6 
# 1 0 2 

數據

df <- structure(list(df1 = c(1L, 0L), df2 = 1:2, df3 = c(9L, 5L), df4 = 1:2, 
    df5 = c(0L, 0L), df6 = 1:2), .Names = c("df1", "df2", "df3", 
"df4", "df5", "df6"), class = "data.frame", row.names = c(NA, 
-2L)) 
+0

完美謝謝! –