【问题标题】:subset dataframe by column groupings按列分组子集数据框
【发布时间】:2014-12-26 14:32:27
【问题描述】:

我有以下数据框:

            V1 subst_string
1     NM_000171        L374R
2     NM_000171        W421P
3     NM_000171        T358A
4     NM_000171        T358A
5     NM_000171        T358A
6     NM_000171        T358A
7     NM_000171        S268R
8     NM_000171         N35P
9     NM_000171        T435F
10    NM_000171        T435F
11    NM_000171        T435F
12    NM_000171        T435F
13    NM_000171        L368E
14    NM_000171        L368G
15    NM_000171        L374R
16    NM_000171        W421L
17    NM_000171        W421P
18    NM_000171        W421L
19    NM_000171        R371R
20    NM_000171        R371R
21    NM_000171        S268R
22    NM_000171         N35R
23    NM_000171         N35P
24    NM_000171         N35R
25    NM_000171        F271L
26    NM_000171        F271L
27    NM_000171        F271L
28    NM_000171        L368E
29    NM_000171        L374R
30    NM_000171        L374R
31    NM_000171        M157N
32    NM_000171        M157N
33    NM_000171        M157N
34    NM_000171        R371R
35    NM_000171        S268R
36    NM_000171        S268R
37    NM_000171        Y201P
38    NM_000171        Y201P
39    NM_000171        Y201P
40    NM_000171        Y201P
41    NM_000171        F271L
42    NM_000171        L368G
43    NM_000171        Y397S
44    NM_000171        Y397G
45    NM_000171        Y397S
46    NM_000171        Y397G
47    NM_000171        M157N
48    NM_000171        R371R
49 NM_001146040        F271L
50 NM_001146040        L368E
51 NM_001146040        L374R
52 NM_001146040        E429P
53 NM_001146040        T358A
54 NM_001146040        T358A
55 NM_001146040        M157N
56 NM_001146040        R371R
57 NM_001146040        S268R
58 NM_001146040         N35P
59 NM_001146040        I443F
60 NM_001146040        I443F
61 NM_001146040        Y201P
62 NM_001146040        Y201P
63 NM_001146040        F271L
64 NM_001146040        L368G
65 NM_001146040        L374R
66 NM_001146040        E429L
67 NM_001146040        L405S
68 NM_001146040        L405G
69 NM_001146040        M157N
70 NM_001146040        R371R
71 NM_001146040        S268R
72 NM_001146040         N35R
73 NM_001292000       NANANA
74 XM_005268412       NANANA

这相当简单 - 第一列由 4 个不同的值组成,我想创建 4 个数据子集,其中数据框由这些不同的值子集。即

            V1 subst_string
1     NM_000171        L374R
2     NM_000171        W421P
3     NM_000171        T358A
4     NM_000171        T358A
5     NM_000171        T358A
6     NM_000171        T358A
7     NM_000171        S268R
8     NM_000171         N35P
9     NM_000171        T435F
10    NM_000171        T435F
11    NM_000171        T435F
12    NM_000171        T435F
13    NM_000171        L368E
14    NM_000171        L368G
15    NM_000171        L374R
16    NM_000171        W421L
17    NM_000171        W421P
18    NM_000171        W421L
19    NM_000171        R371R
20    NM_000171        R371R
21    NM_000171        S268R
22    NM_000171         N35R
23    NM_000171         N35P
24    NM_000171         N35R
25    NM_000171        F271L
26    NM_000171        F271L
27    NM_000171        F271L
28    NM_000171        L368E
29    NM_000171        L374R
30    NM_000171        L374R
31    NM_000171        M157N
32    NM_000171        M157N
33    NM_000171        M157N
34    NM_000171        R371R
35    NM_000171        S268R
36    NM_000171        S268R
37    NM_000171        Y201P
38    NM_000171        Y201P
39    NM_000171        Y201P
40    NM_000171        Y201P
41    NM_000171        F271L
42    NM_000171        L368G
43    NM_000171        Y397S
44    NM_000171        Y397G
45    NM_000171        Y397S
46    NM_000171        Y397G
47    NM_000171        M157N
48    NM_000171        R371R

就是这样的一个子集。我想我可以手动执行此操作,但是我设想在以后的数据集中为 V1 提供更多不同的值。有谁知道我如何根据 V1 的不同值自动生成此数据帧的子集?

谢谢

【问题讨论】:

    标签: r dataframe subset


    【解决方案1】:

    只需使用split 创建list

     split(df, df$V1)
    

    如果您需要全局环境中的4 数据集

     list2env(split(df, df$V1), envir=.GlobalEnv)
    
     head(NM_000171,2)
     #        V1 subst_string
     #1 NM_000171        L374R
     #2 NM_000171        W421P
    

    【讨论】:

    • 是的,第二部分真的很有帮助——我已经用过了。
    【解决方案2】:

    如果你知道拆分后该怎么做,有很多方法;你不需要为此使用'split'。例如查找子组的长度:

    with(ddf, tapply(subst_string, V1, length))
       NM_000171 NM_001146040 NM_001292000 XM_005268412 
              48           24            1            1 
    
    aggregate(subst_string~V1, data=ddf, length)
                V1 subst_string
    1    NM_000171           48
    2 NM_001146040           24
    3 NM_001292000            1
    4 XM_005268412            1
    
    library(data.table)
    ddt = data.table(ddf)
    ddt[,list(len =.N),by=V1]
                 V1 len
    1:    NM_000171  48
    2: NM_001146040  24
    3: NM_001292000   1
    4: XM_005268412   1
    

    【讨论】:

    • +1 以获得正确的建议。在大多数情况下,无需保持数据拆分。
    猜你喜欢
    • 2016-06-04
    • 2021-09-15
    • 1970-01-01
    • 2013-10-20
    • 2016-11-04
    • 2015-03-28
    • 2020-01-07
    • 2023-02-21
    • 2023-03-08
    相关资源
    最近更新 更多