我希望在更大的data.frame列名(名称(mp))中更改其他data.frame(mp $ name)中的单个列的更改
#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
大数据框,&gt;读取意义上的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个这样的删除,而final应该保持列名或mp元素的顺序
感谢帮助
答案 0 :(得分:3)
提取名称及其长度。知道长度可以更容易地切掉最后一个字母(a / b后缀);我不是假设所有的名字只有2个字符。
nm <- names(mydf)
lens <- nchar(nm)
子集基于没有最后一个字母的列名。
mydf1 <- mydf[substr(nm, 1, lens-1) %in% mp$name]