#r #dataframe
#r #фрейм данных
Вопрос:
Я хочу внести изменения в имена столбцов big 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
Большой фрейм данных, > 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, следует удалить соответствующий столбец в dataframe mydf. Например, в приведенном выше примере нет «B», поэтому столбцы Ba и Bb должны быть удалены из mydf, чтобы создать новый фрейм данных 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 удален один параметр (здесь показаны соответствующие две переменные из mydf), таких удалений может быть n, и в конечном итоге должен сохраняться порядок имен столбцов или элементов mp
Помощь приветствуется
Ответ №1:
Извлеките имя и их длины. Зная длины, легче отрезать последнюю букву (суффикс a / b); Я не предполагаю, что все имена состоят всего из 2 символов.
nm <- names(mydf)
lens <- nchar(nm)
Подмножество, основанное на именах столбцов без последней буквы.
mydf1 <- mydf[substr(nm, 1, lens-1) %in% mp$name]
Комментарии:
1. ваше предположение о количестве букв верно, что сильно варьируется