我尝试从数据集中创建尽可能多的随机组。我的数据有点难以解释,所以我会使用iris
作为我的例子。
在iris
中,Species
变量包含3个唯一值:setosa
,versicolor
和virginica
。
我想将数据集随机化并分组为3行组,每组只包含唯一的物种。 (例如每个物种中的1个)
每个小组必须有cumsum(Sepal.Width >= 10)
创建一个标识每个组的新ID
。
到目前为止,我已尝试使用 dplyr 函数group_by()
和sample_n()
。另外split()
和sample()
,但似乎无法获得所需的结果。
使用split()
我认为这可能是错误的做法。我试图让它沿着这些方向运转而没有运气。
split(unique(iris), sample(1:nrow(iris) %/% 3))
答案 0 :(得分:0)
尝试这样的事情:
public boolean findPrefix(String Prefix){
return findBinaryPrefix(listOfWords, Prefix,0, listOfWords.size()-1, 0);
}
/**
* Helper function for findPrefix.
* @param list arraylist
* @param prefix prefix you want to find
* @param low lowest index
* @param high highest index of the array.
* @return returns true if prefix is in the dictionary, else false.
*/
private boolean findBinaryPrefix(ArrayList<String> list, String prefix, int low, int high, int prefixLength){
int charCounter = prefixLength;
if(low>high){
return false;
}
int mid = (low+high)/2;
if(list.get(mid).substring(0, charCounter).equals(prefix.substring(0, charCounter))){
//If the word is equal, then that's the base case.
return true;
}
else if (list.get(mid).substring(0, charCounter).compareTo(prefix.substring(0, charCounter)) < 0){
return findBinaryPrefix(list, prefix, mid+1, high, charCounter);
}
else
return findBinaryPrefix(list, prefix, low, mid-1, charCounter);
}
private ArrayList<String> generateWords(Dictionary dict,String prefix, String seq){
if(seq.length() == 0){
if(dict.findWord(prefix)){
permList.add(prefix);
}
}
else{
for(int i = 0;i<seq.length(); i++){
if(!dict.findPrefix(prefix)){break;}
//if prefix is not even in dictionary, don't bother generating.
//generate permutations when the character is in a different position with each iteration of the loop.
generateWords(dict, prefix + seq.charAt(i) ,seq.substring(0,i) + seq.substring(i+1, seq.length()));
}
}
return permList;
}
答案 1 :(得分:0)
我想我理解了这个问题。以下是使用dplyr
的方法首先,加载一些包并为iris
data.frame中的每一行添加唯一ID。
library(dplyr)
library(tidyr)
iris = iris %>% mutate(Row.ID=1:n())
然后,让我们根据物种分割Row.ID,并获得一个data.frame,其中包含每个物种的一行的所有可能组合
iris_split = split(iris$Row.ID, iris$Species)
combinations = do.call(expand.grid, iris_split)
现在,它是dplyr
和tidyr
时间。让我们在名为tmp
的变量中收集这些组合,将tmp
加入iris
data.frame的其余部分,然后根据条件进行过滤。
tmp = combinations %>%
mutate(Group.ID=1:n()) %>%
gather(Var, Row.ID, -Group.ID) %>%
select(-Var)
result = iris %>%
inner_join(tmp) %>%
group_by(Group.ID) %>%
filter(sum(Sepal.Length) > 10) %>%
arrange(Group.ID)
result
data.frame应该是您正在寻找的。 p>