我想将数据框的子集设置为仅保留在不同日期有3个或更多观察值的组。我想摆脱少于3次观察的群体,或者他们所拥有的观察不是来自3个不同的日子。
以下是一个示例数据集:
Group Day
1 1
1 3
1 5
1 5
2 2
2 2
2 4
2 4
3 1
3 2
3 3
4 1
4 5
因此,对于上面的示例,将保留组1和组3,并且将从数据帧中删除组2和组4。
我希望这是有道理的,我想解决方案将非常简单,但我无法解决(我对R来说很陌生,而且对于像这样的事情提出解决方案的速度不是很快)。我想也许diff功能可以派上用场,但没有进一步的发展。
答案 0 :(得分:6)
使用Url.Action
,您可以:
data.table
给出:
library(data.table)
DT[, if(uniqueN(Day) >= 3) .SD, by = Group]
或 Group Day
1: 1 1
2: 1 3
3: 1 5
4: 1 5
5: 3 1
6: 3 2
7: 3 3
:
dplyr
给出相同的结果。
答案 1 :(得分:5)
使用dplyr
library(dplyr)
df %>%
group_by(Group) %>%
filter(length(unique(Day)) >= 3)
#Source: local data frame [7 x 2]
#Groups: Group [2]
# Group Day
# (int) (int)
#1 1 1
#2 1 3
#3 1 5
#4 1 5
#5 3 1
#6 3 2
#7 3 3
答案 2 :(得分:4)
我们可以使用i1 <- rowSums(table(df1)!=0)>=3
subset(df1, Group %in% names(i1)[i1])
# Group Day
#1 1 1
#2 1 3
#3 1 5
#4 1 5
#9 3 1
#10 3 2
#11 3 3
base R
或者单行df1[with(df1, as.logical(ave(Day, Group, FUN = function(x) length(unique(x)) >=3))),]
将是
public class DataBaseHelper extends SQLiteOpenHelper{
private static final int DATABASE_VERSION = 1;
private static final String DATABASE_NAME = "bazaFire.db";
private static final String TABLE_NAME = "Messages";
private static final String COLUMN_NAME="message_body";
private SQLiteDatabase myDB;
public DataBaseHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("CREATE TABLE " + TABLE_NAME
+ "(id INTEGER PRIMARY KEY AUTOINCREMENT, message_body TEXT)");
}
@Override
public void onUpgrade(SQLiteDatabase db, int i, int i1) {
db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME);
onCreate(db);
}
public void insertMsg(String msg) {
SQLiteDatabase db = getWritableDatabase();
Log.d("getWritable", "Okay");
ContentValues cv = new ContentValues();
cv.put(COLUMN_NAME, msg);
Log.d("Stavljena", msg);
db.insert(TABLE_NAME, null, cv);
db.close();
}
public Cursor query(String table, String[] columns, String selectionArgs, String groupBy, String having, String orderBy){
return myDB.query("Messages", null, null, null, null, null, null);
}