Добавьте строку над заголовками строк в R - PullRequest
1 голос
/ 14 февраля 2012

Я хочу добавить дополнительную строку над строкой 1 следующего фрейма данных (то есть над метками a, b и Percent):

a<-c(1:5) 
b<-c(4,3,2,1,1) 
Percent<-c(40,30,20,10,10)  
df1<-data.frame(a,b,Percent)

Эти кадры данных представляют вопросы в анализе собеседования, который я делаю, и я хочу включить дескриптор вопроса над заголовками строк, чтобы я мог легко определить, какой блок данных принадлежит какому вопросу (т. Е. «Возраст»). Я использовал rbind для добавления строк, но можно ли использовать эту команду над заголовками строк?

Спасибо.

Ответы [ 3 ]

4 голосов
/ 14 февраля 2012

Если это просто метаданные, вы можете добавить их в качестве атрибута в data.frame.

> attr(df1, "Question") <- "Age"
> attributes(df1)
$names
[1] "a"       "b"       "Percent"
$row.names
[1] 1 2 3 4 5
$class
[1] "data.frame"
$Question
[1] "Age"

Если вы хотите, чтобы вопрос был напечатан над data.frame, вы можете определить класс Question, который расширяет data.frame, и переопределите метод print.

class(df1) <- c( "Question", class(df1) )
print.Question <- function( x, ... ) {
  if( ! is.null( attr(x, "Question") ) ) {
    cat("Question:", attr(x, "Question"), "\n")
  }
  print.data.frame(x)
}
df1

Но это выглядит излишне: может быть проще просто добавить столбец.

> df1$Question <- "Age"
> df1
  a b Percent Question
1 1 4      40      Age
2 2 3      30      Age
3 3 2      20      Age
4 4 1      10      Age
5 5 1      10      Age
0 голосов
/ 03 октября 2013

Хотелось бы, чтобы это было частью ядра R, но я взломал решение с помощью пакета Лайкерта Джейсона Брайера , использующего атрибуты для хранения имен столбцов и позволяющего функции likert читать эти атрибуты и использовать их при построении графиков , Это работает только с этой функцией - там есть функция HMisc, называемая меткой, но опять-таки ни одна из функций не заботится об этом (включая функции, которые показывают кадры данных и т. Д.).

Вот описание моего хака http://reganmian.net/blog/2013/10/02/likert-graphs-in-r-embedding-metadata-for-easier-plotting/, со ссылкой на код.

0 голосов
/ 14 февраля 2012

rbind действительно единственный путь, но все переключилось бы на атомарные данные.Например:

cols <- c("Age", "Age", "Age")
df1 <- rbind(cols,df1)
str(df1)

Определенно согласен с Винсентом по этому вопросу, я делаю это довольно часто с данными опроса, если они все в одном data.frame Я обычно устанавливаю атрибут comment для каждого элементаdata.frame (), это также полезно, когда вы выполняете несколько операций и хотите поддерживать разумный colnames(df1).Это не очень хорошая практика, но если это для презентации, вы всегда можете установить check.names=F при создании data.frame()

a<-c(1:5) 
b<-c(4,3,2,1,1) 
Percent<-c(40,30,20,10,10)  
df1<-data.frame(a,b,Percent)

comment(df1$a) <- "Q1a. This is a likert scale"
comment(df1$b) <- "Q1b. This is another likert scale"
comment(df1$Percent) <- "QPercent. This is some other question"

Затем, если я "забуду", что находится в столбцах, я могу взятьбыстрый пик:

sapply(df1, comment)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...