2012-02-14 44 views
1

我想添加一個額外的行上面的是以下數據框的第1行(即上面的標籤a,b和百分比):添加行的上方行標題中的R

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

這些dataframes代表問題在我正在做的訪談分析中,我希望在行標題上方包含問題描述符,以便我可以輕鬆確定哪個數據框屬於哪個問題(即「年齡」)。我一直在使用rbind來添加行,但是可以在行標題上面使用這個命令嗎?

謝謝。

回答

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類,延伸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

謝謝@Vincent Zoonekynd,但是有可能「年齡」可以作爲第一行(在a,b和Percent之上)而不是列添加?謝謝。 – 2012-02-14 10:00:35

+0

我編輯了我的答案,以解釋如何顯示默認屬性。但是它是元數據,而不是數據:例如,如果將data.frame保存到CSV文件中,那將消失 - 這就是爲什麼我更願意添加一列,即使它是多餘的。 – 2012-02-14 10:08:33

0

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) 
0

我想這是核心R的部分,但我使用屬性來存儲列名,並且具有李克特功能來讀取這些屬性和打印時使用它們設計了一個簡單的解決方案與Jason Bryer's Likert package。它只適用於那個函數 - 有一個叫做標籤的HMisc函數,但是沒有一個函數關心這個(包括顯示數據框等的函數)。

這裏是我的破解http://reganmian.net/blog/2013/10/02/likert-graphs-in-r-embedding-metadata-for-easier-plotting/的書面文章,附有代碼鏈接。