【问题标题】:Randomize dataframe in r在r中随机化数据帧
【发布时间】:2018-03-25 05:01:40
【问题描述】:

下面显示了一个使用Object 列随机排序的数据框作为示例。 order 应用于sample 仅用于将相似的对象组织在一起。是否有可能避免order 操作并在重复的Object 列内实现随机化?谢谢。

set.seed(7)
# read csv
df <- read.csv("~/Documents/test.csv", header = T)
df
     Object Tag Comment
1         1   A      C1
2         1   B      C2
3         1   C      C3
4         1   D      C4
5         2   A      A1
6         2   C      A2
7         2   F      A3
8         2   G      A4
9         3   P      C1
10        3   N      A1
11        3   P      B5
# randomize the order of the df
dfr <- df[sample(nrow(df)),]
dfr
    Object Tag Comment
11      3   P      B5
4       1   D      C4
2       1   B      C2
1       1   A      C1
9       3   P      C1
5       2   A      A1
7       2   F      A3
10      3   N      A1
8       2   G      A4
3       1   C      C3
6       2   C      A2 
#sort dfr using Object field
dfrSort <- dfr[with(dfr, order(Object)), ]
dfrSort
     Object Tag Comment
4         1   D      C4
2         1   B      C2
1         1   A      C1
3         1   C      C3
5         2   A      A1
7         2   F      A3
8         2   G      A4
6         2   C      A2
11        3   P      B5
9         3   P      C1
10        3   N      A1

【问题讨论】:

    标签: r random permutation


    【解决方案1】:

    在按“对象”分组后,请执行 sampleing 以不打破关系

    library(dplyr)
    df %>%
         group_by(Object) %>% 
         slice(sample(row_number()))
    # A tibble: 11 x 3
    # Groups:   Object [3]
    #   Object   Tag Comment
    #    <int> <chr>   <chr>
    # 1      1     C      C3
    # 2      1     B      C2
    # 3      1     A      C1
    # 4      1     D      C4
    # 5      2     C      A2
    # 6      2     F      A3
    # 7      2     G      A4
    # 8      2     A      A1
    # 9      3     P      B5
    #10      3     P      C1
    #11      3     N      A1
    

    【讨论】:

    • 谢谢,但最后两列应该随机排列在一起(成对),如示例所示。对于Object 1 Tag D,应始终与Comment C4 配对,以此类推。另一个Objects也是如此。
    • 我相信是的。粘贴我的问题“该顺序仅应用于sample 以将相似的对象组织在一起。是否有可能避免order 操作并在重复的对象列中实现随机化?”
    • 这不就是举个例子的目的吗?需要输出样例吗?
    • @deepseefan 好的,现在检查一下。我以为你想打破列的顺序
    猜你喜欢
    • 2017-09-13
    • 1970-01-01
    • 2019-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-28
    • 2012-02-04
    • 2017-02-10
    相关资源
    最近更新 更多