【问题标题】:R: matching column heading from elements of column of other data.frame and deletingR:从其他data.frame的列元素中匹配列标题并删除
【发布时间】:2011-12-23 21:13:44
【问题描述】:

我想借助从其他 data.frame (mp$name) 更改单个列来更改大 data.frame 列名称 (names(mp))

#first data frame : column chooser, small data.frame with 
# list of columns and other information  

 mp <- data.frame(name = c("A", "C", "D"), pos = 1:3) # number of rows 
                                                     #in real dataset is> 5,000 
              name pos
            1    A   1
            2    C   2
            3    D   3

大数据框,> 10,000 个读取变量,但此处仅显示四个

    # second data.frame  
 mydf <- data.frame(Aa= 1:10, Ab = 11:20, Ba = 21:30, Bb = 31:40, 
Ca = 41:50, Cb = 51:60, Da = 61:60,Db = 61:70)

mp$name 中的每个值对应两个变量 - 例如 A 对应 Aa,Ab 类似 B 对应 Ba 和 Bb。每个这样的重复变量都有后缀“a”和“b”

> mydf
   Aa Ab Ba Bb Ca Cb Da Db
1   1 11 21 31 41 51 61 61
2   2 12 22 32 42 52 60 62
3   3 13 23 33 43 53 61 63
4   4 14 24 34 44 54 60 64
5   5 15 25 35 45 55 61 65
6   6 16 26 36 46 56 60 66
7   7 17 27 37 47 57 61 67
8   8 18 28 38 48 58 60 68
9   9 19 29 39 49 59 61 69
10 10 20 30 40 50 60 60 70

我的想法是,如果从 mp$name 中删除某些内容,则应删除数据框 mydf 中的相应列。例如在上面的例子中没有“B”,因此应该从 mydf 中删除列 Ba 和 Bb 以创建新的数据框 mydf1

        mydf1
       Aa Ab Ca Cb Da Db
    1   1 11 41 51 61 61
    2   2 12 42 52 60 62
    3   3 13 43 53 61 63
    4   4 14 44 54 60 64
    5   5 15 45 55 61 65
    6   6 16 46 56 60 66
    7   7 17 47 57 61 67
    8   8 18 48 58 60 68
    9   9 19 49 59 61 69
    10 10 20 50 60 60 70

虽然从mp中删除了单个var(这里显示了mydf中对应的两个变量),但是可以有n个这样的删除并且最终应该保持列名或mp元素的顺序

感谢帮助

【问题讨论】:

    标签: r dataframe


    【解决方案1】:

    提取名称及其长度。知道长度可以更容易地切掉最后一个字母(a/b 后缀);我不是假设所有的名字都只有 2 个字符。

    nm <- names(mydf)
    lens <- nchar(nm)
    

    基于不带最后一个字母的列名的子集。

    mydf1 <- mydf[substr(nm, 1, lens-1) %in% mp$name]
    

    【讨论】:

    • 您对字母数量的假设是正确的,变化很大
    猜你喜欢
    • 2019-01-18
    • 2021-03-17
    • 1970-01-01
    • 1970-01-01
    • 2018-05-04
    • 2017-09-29
    • 1970-01-01
    • 2011-09-11
    • 2022-12-02
    相关资源
    最近更新 更多