在R中的行标题上方添加一行

时间:2012-02-14 09:34:36

标签: r

我想在以下数据框的第1行上方添加一个额外的行(即在标签a,b和百分比之上):

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 个答案:

答案 0 :(得分:4)

如果只是元数据,您可以将其作为属性添加到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的{​​{1}}类, 并覆盖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

答案 1 :(得分:0)

rbind确实是唯一可行的方法,但一切都会转向原子数据。例如:

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

肯定同意文森特关于这一点,我经常使用调查数据,如果它只在一个data.frame中我通常在data.frame()的每个元素上设置comment属性,它是在执行多个操作并且希望保持合理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)

答案 2 :(得分:0)

我希望这是核心R的一部分,但我使用Jason Bryer's Likert package使用属性来存储列名称,并使用likert函数读取这些属性并在绘图时使用它们。它只适用于那个函数 - 有一个函数HMisc叫做label,但是没有一个函数关心这个(包括显示数据帧的函数等)。

这是我的hack http://reganmian.net/blog/2013/10/02/likert-graphs-in-r-embedding-metadata-for-easier-plotting/的一篇文章,其中包含指向代码的链接。