包plyr
中的函數真的在這類問題上大放異彩。這是一個使用兩行代碼的解決方案。
設置數據(由@GavinSimpson友情提供)
dat <- structure(list(row.no = 1:5, column2 = structure(c(1L, 1L, 1L,
1L, 1L), .Label = "bb", class = "factor"), column3 = structure(c(1L,
1L, 1L, 2L, 3L), .Label = c("ee", "yy", "zz"), class = "factor"),
column4 = structure(c(2L, 1L, 2L, 1L, 2L), .Label = c("down",
"up"), class = "factor")), .Names = c("row.no", "column2",
"column3", "column4"), class = "data.frame", row.names = c(NA,
-5L))
裝入plyr
包
library(plyr)
使用ddply
分裂,分析,並結合DAT。以下代碼分析行將數據拆分爲(column2和column3)的獨特組合。然後我添加一個名爲unique的列,它計算每個set的column4的唯一值的數量。最後,用一個簡單的子集返回只有那些線,獨特的== 1和下降5列
df <- ddply(dat, .(column2, column3), transform,
row.no=row.no, unique=length(unique(column4)))
df[df$unique==1, -5]
而且結果:
row.no column2 column3 column4
4 4 bb yy down
5 5 bb zz up
+1使用plyr – 2011-04-17 09:37:02