Есть ли способ добавить этот столбец и его имя, которое не требует значительного переписывания?

#r #dataframe

#r #фрейм данных

Вопрос:

это факсимиле кода, который у меня есть на данный момент

 state_abbr1<- rnorm(8,5,2)
county_code1<- rnorm(8,5,2)
county_name1<- rnorm(8,5,2)

Patient_ID <-c("13962830","20111947", "58786237", "57991640", "79365970", "84356256", "81640916", "71119659")
Sex        <-c( "Male", "Female", "Female", "Male","Female", "Female", "Female", "Female")
Code_test1 <-cbind.data.frame(Patient_ID, Sex)

Clean_Code1<-cbind.data.frame(state_abbr1,county_name1,county_code1)
Clean_Code1[4:32]<-NA
Clean_Code1[,5] <- as.numeric(Code_test1[,"Patient_ID" ])
Clean_Code1[,7] <- as.factor(Code_test1[,"Sex"])
 

и т. д

Clean_Code и Code_test — это 200000 строк. и Code_test — это 32 переменные с уникальными именами, каждая из которых добавляется в Clean_Code одинаково в разных позициях.

Я мог бы добавить некоторый код к каждой строке с помощью мультикурсора, но я бы хотел избежать необходимости индивидуально изменять все 28 входных переменных. В идеале есть что-то, что позволит мне изменять и добавлять символьные переменные из code_test в Clean_Code, а также брать соответствующие имена переменных из Code_test и применять их к Clean_Code.

Заранее спасибо. p.s. также открыт для разных методов, поскольку мне, вероятно, придется писать код для аналогичных задач для моих следующих 2 наборов данных…

Комментарии:

1. Не могли бы вы добавить воспроизводимый пример? и каков ожидаемый результат?

2. отредактировано для вас.

Ответ №1:

Создайте вектор с индексом столбца, который вы хотите заменить Clean_Code . Обратите внимание, что вы можете использовать : для создания последовательности индексов, если они являются последовательными, если они не добавляются вручную. Создайте аналогичный вектор для Code_test . Для Code_test вы можете создать вектор индекса столбца или имен столбцов, в зависимости от того, что проще. Оба они должны работать.

 clean_code_index <- c(5, 7, 8:12, 15, ....)
code_test_index <- c(1:3, 6,9, .....)
code_test_names <- c("Patient ID", "Sex", .....)
 

Затем вы можете скопировать значения напрямую.

 #with index
Clean_Code[clean_code_index] <- Code_test[code_test_index]
#Or with names
Clean_Code[clean_code_index] <- Code_test[code_test_names]
 

Используйте любой из них сверху, чтобы скопировать значения.

Для копирования имен вы можете использовать code_test_names или code_test_index в зависимости от того, что вы создали.

 #With names
names(Clean_Code)[clean_code_index] <- code_test_names
#Or with index
names(Clean_Code)[clean_code_index] <- names(Code_test)[code_test_index]
 

Комментарии:

1. Если я понимаю, что вы сделали, это не должно иметь значения, но я отредактировал свой пост, чтобы предоставить факсимиле данных, с которыми я работаю.

2. Вы пробовали мой ответ? Это дало вам какую-либо ошибку? Можете ли вы также обновить свой пост ожидаемым результатом, чтобы я мог сравнить свой ответ с этим?

3. В итоге я использовал половину вашего ответа. В основном потому, что я не был уверен, как применять индексы в моем конкретном случае

4. Я делаю еще одну попытку в другой ситуации, используя вашу технику, и я хотел спросить ваше мнение, так как это не совсем работает, но я не уверен, какой лучший способ показать вам мой код…

5. Лучшим способом было бы задать новый вопрос, чтобы вы могли получить помощь легко и быстрее.