如何使用fread函数读取data.table中的数字头?

时间:2014-06-06 03:46:38

标签: r data.table

在读取包含一些数字标题的csv文件时,data.table中的fread函数不会读取标题。我得到的输出的一部分是:

df2 <- fread("filename.csv", header = T)
head(df2)
         V1           V2
1: Country Name Country Code
2:  Afghanistan          AFG
3:  Afghanistan          AFG
4:  Afghanistan          AFG
5:  Afghanistan          AFG
6:  Afghanistan          AFG
                                                                  V3
1:                                                    Indicator Name
2:    (%) Benefits held by 1st 20% population - All Social Insurance
3:   (%) Benefits held by 1st 20% population - All Social Protection
4:  (%) Benefits held by 1st 20% population - All Social Safety Nets
5: (%) Benefits held by 1st 20% population - Unemp benefits and ALMP
6:                            (%) Generosity of All Social Insurance
               V4   V5   V6   V7   V8   V9  V10  V11  V12  V13  V14  V15  V16
1: Indicator Code 1960 1961 1962 1963 1964 1965 1966 1967 1968 1969 1970 1971
2:    allsi.bi_q1   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA
3:    allsp.bi_q1   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA
4:    allsa.bi_q1   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA
5:    lm_ub.bi_q1   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA
6:  allsi.gen_pop   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA
    V17  V18  V19  V20  V21  V22  V23  V24  V25  V26  V27  V28  V29  V30  V31
1: 1972 1973 1974 1975 1976 1977 1978 1979 1980 1981 1982 1983 1984 1985 1986
2:   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA
3:   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA
4:   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA
5:   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA
6:   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA
    V32  V33  V34  V35  V36  V37  V38  V39  V40  V41  V42  V43  V44  V45  V46
1: 1987 1988 1989 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000 2001
2:   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA
3:   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA
4:   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA
5:   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA
6:   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA
    V47  V48  V49  V50  V51        V52  V53  V54  V55  V56  V57  V58
1: 2002 2003 2004 2005 2006 2007.00000 2008 2009 2010 2011 2012 2013
2:   NA   NA   NA   NA   NA    3.76921   NA   NA   NA   NA   NA   NA
3:   NA   NA   NA   NA   NA    7.03019   NA   NA   NA   NA   NA   NA
4:   NA   NA   NA   NA   NA    8.24805   NA   NA   NA   NA   NA   NA
5:   NA   NA   NA   NA   NA         NA   NA   NA   NA   NA   NA   NA
6:   NA   NA   NA   NA   NA   12.93310   NA   NA   NA   NA   NA   NA

但是,read.csv(对于大文件来说非常慢)会使数字标题保持前导X

df1 <- read.csv("filename.csv", header = T)

head(df1)

  Country.Name Country.Code
1  Afghanistan          AFG
2  Afghanistan          AFG
3  Afghanistan          AFG
4  Afghanistan          AFG
5  Afghanistan          AFG
6  Afghanistan          AFG
                                                     Indicator.Name
1    (%) Benefits held by 1st 20% population - All Social Insurance
2   (%) Benefits held by 1st 20% population - All Social Protection
3  (%) Benefits held by 1st 20% population - All Social Safety Nets
4 (%) Benefits held by 1st 20% population - Unemp benefits and ALMP
5                            (%) Generosity of All Social Insurance
6                           (%) Generosity of All Social Protection
  Indicator.Code X1960 X1961 X1962 X1963 X1964 X1965 X1966 X1967 X1968 X1969
1    allsi.bi_q1    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA
2    allsp.bi_q1    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA
3    allsa.bi_q1    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA
4    lm_ub.bi_q1    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA
5  allsi.gen_pop    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA
6  allsp.gen_pop    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA
  X1970 X1971 X1972 X1973 X1974 X1975 X1976 X1977 X1978 X1979 X1980 X1981 X1982
1    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA
2    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA
3    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA
4    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA
5    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA
6    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA
  X1983 X1984 X1985 X1986 X1987 X1988 X1989 X1990 X1991 X1992 X1993 X1994 X1995
1    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA
2    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA
3    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA
4    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA
5    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA
6    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA
  X1996 X1997 X1998 X1999 X2000 X2001 X2002 X2003 X2004 X2005 X2006    X2007
1    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA  3.76921
2    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA  7.03019
3    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA  8.24805
4    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA       NA
5    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA 12.93310
6    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA 16.84360
  X2008 X2009 X2010 X2011 X2012 X2013  
1    NA    NA    NA    NA    NA    NA
2    NA    NA    NA    NA    NA    NA
3    NA    NA    NA    NA    NA    NA
4    NA    NA    NA    NA    NA    NA
5    NA    NA    NA    NA    NA    NA
6    NA    NA    NA    NA    NA    NA

所以,我的问题是如何在使用fread函数读取csv文件时保留数字标题?

1 个答案:

答案 0 :(得分:0)

这看起来像世界银行的WDI。我使用以下代码在R中输入数据并转换为长格式。希望它有所帮助。

library(data.table); library(reshape2)
WDI <- fread(input="WDI_Data.csv", header=TRUE, verbose=TRUE)
setnames(WDI, c("country","iso3","indicator.name","indicator.code",paste0(1960:2013)))
WDI <- data.table(melt(data=WDI, na.rm=TRUE, id.vars=c("country","iso3","indicator.name","indicator.code"), variable.name="year", value.name="indicator.value"))
WDI[, year := as.integer(as.character(year))]
setcolorder(WDI, c("country","iso3","year", "indicator.code","indicator.name","indicator.value"))
setkeyv(WDI,c("iso3","year", "indicator.code"))
str(WDI)

如果需要,可以使用数字名称,在融合数据集之前使用它:

summary(WDI$`2000`)