2015-01-15 106 views
1

我有一個.csv文件,需要讀入R.第一行包含名稱(例如BFI1,BFI2,CAQ2),第二行包含問題我還想在R中訪問(例如「我喜歡參加派對」)。前兩個之後的每一行對應於一個參與者。將帶名稱和標籤的.csv文件讀入R

我希望能夠訪問R中的代碼和文本(例如,使用grep訪問一次調查中的所有問題,並且如果需要,還可以查看項目文本。是數字。

BFI1, BFI2, CAQ1, CAQ2 
Likes to read, Enjoys Parties, Is Nervous, Loves Books 
3, 7, 1, 4 
4, 5, 3, 3 

我想這麼讀這個,我可以訪問這兩個名稱(第1行)或文本(如標籤也許)。我已經看過了Hmisc包,但他們的標籤功能似乎有限。

有沒有什麼方法可以讀取這個.csv文件並訪問這兩個值?

+0

同意w /第1步,但對於第2步應該跳過參數,以便數值可以正確檢測。 –

回答

1

您可以使用NROWS並跳過參數或read.csv

nameFile <- "data.csv" 

# read the first two lines 
vectorNames <- read.csv(nameFile, nrows = 1) 
vectorDescription <- read.csv(nameFile, nrows = 1, skip = 1) 

# read the data 
dfIn <- read.csv(nameFile, skip = 2) 
names(dfIn) <- vectorNames 
+0

我認爲你需要在'vectorNames'中'stringsAsFactors = FALSE'。否則,當您將它們分配爲名稱時,它們將被強制爲它們的整數值 –

2

不知道你沒事具有標籤作爲一個單獨的載體,但這裏的一個想法。假設你的文件名是x.txt

## set up an argument list for scan() - just to avoid repetition 
scanArgs <- list(
    file = "x.txt", what = "", nlines = 1, sep = ",", strip.white = TRUE 
) 

## read the data with no header and add the first line as names 
df <- setNames(
    read.table("x.txt", skip = 2, sep = ","), 
    do.call(scan, scanArgs) 
) 
# BFI1 BFI2 CAQ1 CAQ2 
# 1 3 7 1 4 
# 2 4 5 3 3 

## make the label vector 
labels <- setNames(do.call(scan, c(scanArgs, skip = 1)), names(df)) 
#   BFI1    BFI2    CAQ1    CAQ2 
# "Likes to read" "Enjoys Parties"  "Is Nervous" "Loves Books" 

所以在labels元素對應列df和列是數字的。

注意x.txt

txt <- 'BFI1, BFI2, CAQ1, CAQ2 
Likes to read, Enjoys Parties, Is Nervous, Loves Books 
3,7,1,4 
4,5,3,3' 
writeLines(txt, "x.txt") 
0

@Richard斯克裏芬創建我用你的代碼,並隨後將其與這件事使用包

library(Hmisc) 
y=data.frame(temp=rep(NA,nrow(df))) 
for (i in 1:length(labels)){ 
x=df[,i] 
label(x)=labels[i] 
y[names(df)[i]]=x 
} 
y$temp=NULL 
y 
# BFI1 BFI2 CAQ1 CAQ2 
# 1 3 7 1 4 
# 2 4 5 3 3 
label(y) 
#   BFI1    BFI2    CAQ1    CAQ2 
# "Likes to read" "Enjoys Parties"  "Is Nervous" "Loves Books" 
0

大廈米歇爾Usuelli答案,並具有豐富的斯克裏芬修正,你可以寫這個功能:

read_csv_with_labels <- function(fileName) 
{ 
library(Hmisc) 

# read the first two lines 
varNames <- read.csv(fileName, nrows = 1, stringsAsFactors = FALSE, header = FALSE) 
varLabels <- read.csv(fileName, nrows = 1, stringsAsFactors = FALSE, header = TRUE) 

# read the data 
df <- read.csv(fileName, skip = 2) 

# assign variable names and labels to the dataframe 
names(df) <- varNames 
label(df) <- varLabels 

return(df) 
} 

我覺得這應該包含在read.csv和read_csv的基本功能中。