我如何随机抽样,例如data.table中的三个组,以便结果包含三个组,其中包含原始data.table中的所有行?
<com.google.android.material.tabs.TabLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/tabs"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:tabInlineLabel="true"
app:tabMode="scrollable"
app:tabGravity="fill">
<com.google.android.material.tabs.TabItem
style="@style/Widget.MaterialComponents.TabLayout.Colored"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:icon="@drawable/ic_attach_money_black_24dp"
android:text="Selected" />
<com.google.android.material.tabs.TabItem
style="@style/Widget.MaterialComponents.TabLayout.Colored"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:icon="@drawable/ic_attach_money_black_24dp" />
<com.google.android.material.tabs.TabItem
style="@style/Widget.MaterialComponents.TabLayout.Colored"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:icon="@drawable/ic_attach_money_black_24dp"
/>
<com.google.android.material.tabs.TabItem
style="@style/Widget.MaterialComponents.TabLayout.Colored"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:icon="@drawable/ic_attach_money_black_24dp" />
<com.google.android.material.tabs.TabItem
style="@style/Widget.MaterialComponents.TabLayout.Colored"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:icon="@drawable/ic_attach_money_black_24dp"
/>
</com.google.android.material.tabs.TabLayout>
我知道如何从data.table中随机选择10行:
library(data.table)
dat <- data.table(ids=1:20, groups=sample(x=c("A","B","C", "D", "E", "F"), 20,
replace=TRUE))
以及如何按组进行抽样
dat.sampl1 <- as.data.table(sapply(dat[], sample, 10))
但如何随机抽样组?所以结果应该是这样的:
dat[,.SD[sample(.N, min(.N,3))], by = groups]
答案 0 :(得分:3)
你的意思是:
onClick
如果您想使用替换对组进行抽样,您可以执行以下操作,其中set.seed(123)
dat <- data.table(ids=1:20, groups=sample(x=c("A","B","C", "D", "E", "F"), 20,
replace=TRUE))
dat[groups %in% sample(unique(dat[, groups]), size = 3)][order(groups)]
# ids groups
# 1: 3 C
# 2: 10 C
# 3: 12 C
# 4: 7 D
# 5: 9 D
# 6: 14 D
# 7: 4 F
# 8: 5 F
# 9: 8 F
# 10: 11 F
# 11: 16 F
# 12: 20 F
已被采样两次:
A
答案 1 :(得分:1)
此代码可以使用%in%
使用单行基本R代码来检查使用sample
函数生成的索引:
df1[df1[,'groups'] %in% sample(unique(df1[,'groups']), size = 3, replace = F), ]
例如:
> df1 <- data.frame("ids" = 1:20, "groups" = sample(LETTERS[1:4], size = 20, replace = T))
> df2 <- df1[df1[,'groups'] %in% sample(unique(df1[,'groups']), size = 3, replace = F), ]
> df2[order(df2[,'groups']),]
ids groups
4 4 B
6 6 B
18 18 B
20 20 B
1 1 C
2 2 C
3 3 C
9 9 C
12 12 C
16 16 C
19 19 C
7 7 D
11 11 D