Строка, связывающая фрейм данных со встроенным фреймом данных в R?

#r #dataframe

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

Вопрос:

Я пытаюсь повторно связать данные с другой дополнительной строкой. Но я продолжаю получать следующую ошибку:

 Error in `.rowNamesDF<-`(x, value = value) : 
  duplicate 'row.names' are not allowed
In addition: Warning message:
non-unique values when setting 'row.names':1,2,3,4 

Я почти уверен, что это связано с тем фактом, что мой фрейм данных имеет фрейм данных внутри фрейма данных.

 class(data)
[1] "dfidx_mlogit" "dfidx"        "data.frame"   "mlogit.data" 
  

Мой вопрос в том, как мне повторно связать данные с другой строкой или другим набором данных аналогичного размера, если в фрейм данных встроен фрейм данных. Или как мне отделить фрейм данных от встроенного фрейма данных?

Это то, что я пытаюсь заставить работать:

 #Row bind the dataset with itself.
new_data=rbind(data,data)
  

Обратите внимание, что это усеченное подмножество набора данных, которое включает числовые и строковые переменные, поэтому использование as.numeric для меня не работает, потому что это переменные со строковым значением NA

Вот данные:

 data=structure(list(EDUC = c(4L, 4L, 4L, 4L), HEALTH = c(3L, 3L, 3L, 
3L), idx = structure(list(chid = c(1L, 1L, 1L, 1L), unique_id = c(3000175513, 
3000175513, 3000175513, 3000175513), alt = structure(1:4, .Label = c("Bicycle", 
"Car", "Metro", "Walking"), class = "factor")), ids = c(1, 1, 
2), row.names = c(NA, 4L), class = c("idx", "data.frame"))), row.names = c(NA, 
4L), class = c("dfidx_mlogit", "dfidx", "data.frame", "mlogit.data"
), idx = structure(list(chid = c(1L, 1L, 1L, 1L), unique_id = c(3000175513, 
3000175513, 3000175513, 3000175513), alt = structure(1:4, .Label = c("Bicycle", 
"Car", "Metro", "Walking"), class = "factor")), ids = c(1, 1, 
2), row.names = c(NA, 4L), class = c("idx", "data.frame")))
  

Ответ №1:

Попробуйте это.

 > row.names(data$idx) <- c()
> row.names(data) <- c()
> 
> data_new <- rbind(data, data)
> data_new
  EDUC HEALTH idx.chid idx.unique_id idx.alt
1    4      3        1    3000175513 Bicycle
2    4      3        1    3000175513     Car
3    4      3        1    3000175513   Metro
4    4      3        1    3000175513 Walking
5    4      3        1    3000175513 Bicycle
6    4      3        1    3000175513     Car
7    4      3        1    3000175513   Metro
8    4      3        1    3000175513 Walking
  

Ответ №2:

Вы можете сгенерировать правильное data.frame использование do.call .

 res <- do.call(data.frame, data) 
str(res)
# 'data.frame': 4 obs. of  5 variables:
# $ EDUC         : int  4 4 4 4
# $ HEALTH       : int  3 3 3 3
# $ idx.chid     : int  1 1 1 1
# $ idx.unique_id: num  3e 09 3e 09 3e 09 3e 09
# $ idx.alt      : Factor w/ 4 levels "Bicycle","Car",..: 1 2 3 4