我想在以下数据框的第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添加行,但是可以在行标题上方使用此命令吗?
感谢。
答案 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/的一篇文章,其中包含指向代码的链接。