2013-10-18 33 views
0

我想重新命名一个数据框(df)中的1​​04列使用列表或字符向量(我试过两种方式)。R colnames()将列表中的每个元素分配到第一列

不是将向量或列表中的104个元素分配到104个列中,而是将全部104个元素分配到第一列,而其他所有元素都获得NA。

关于为什么这种行为以及如何正确地做到这一点的任何建议?

> names(df) 


[1] "V1" "V2" "V3" "V4" "V5" "V6" "V7" "V8" "V9" "V10" "V11" "V12" "V13" "V14" "V15" "V16" "V17" "V18" "V19" "V20" "V21" "V22" "V23" "V24" "V25" "V26" "V27" 
[28] "V28" "V29" "V30" "V31" "V32" "V33" "V34" "V35" "V36" "V37" "V38" "V39" "V40" "V41" "V42" "V43" "V44" "V45" "V46" "V47" "V48" "V49" "V50" "V51" "V52" "V53" "V54" 
[55] "V55" "V56" "V57" "V58" "V59" "V60" "V61" "V62" "V63" "V64" "V65" "V66" "V67" "V68" "V69" "V70" "V71" "V72" "V73" "V74" "V75" "V76" "V77" "V78" "V79" "V80" "V81" 
[82] "V82" "V83" "V84" "V85" "V86" "V87" "V88" "V89" "V90" "V91" "V92" "V93" "V94" "V95" "V96" "V97" "V98" "V99" "V100" "V101" "V102" "V103" "V104" 

> d2 = as.character(strapply(name,"(?<=[0-9]{1}=)(.{2,}?)((?= V[0-9])|(?= $))",perl=TRUE)) 
> d2 
[1] "c(\"ICPSR MEMBER ID NUMBER\", \"CONGRESS\", \"CHAMBER/CLASS\", \"STATE\", \"DISTRICT\", \"PARTY\", \"POL PARTY\", \"FULL NAME\", \"SEX\", \"REGION\", \"STATE BORN ..... \"ICPSR STUDY NUMBER\", \"ICPSR VERSION NUMBER\", \"ICPSR PART NUMBER\")" 

> class(d2) 
[1] "character" 
> colnames(df2) = d2 
> head(df2,1) 


c("ICPSR MEMBER ID NUMBER", "CONGRESS", "CHAMBER/CLASS", "STATE", "DISTRICT", "PARTY", "POL PARTY", "FULL NAME", "SEX", "REGION", "STATE BORN (ICPSR CODE)", "BORN/REP SAME STATE", "BORN/REP SAME REGION", "ICPSR RELATIVES CODE", "RELATIVES CLLPS", "SE ... 
    1 

                                                                  1 
    NA NA NA NA NA NA      NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 
+0

保鲜膜别在'as.character' ...你正在做一个单串D2出的新名字向量的... – Justin

+0

所以,如果我不这样做,它会生成一个列表。如果我应用列表,它具有相同的行为。 – user2547308

+1

将列表更改为一个向量,然后分配它。 '?unlist' – Michael

回答

0

创建一个标签向量,然后将其分配给数据帧,不需要as.character

labels <- c("ICPSR MEMBER ID NUMBER", "CONGRESS") 
colnames(df) <- labels 
+0

我不理解你的回应 - d2是一个字符向量。当我使用colnames(df)<-d2应用它时,它将所有元素分配到第一列,其他所有元素都是NA。也许我应该提一下,d2是从名称中存储的一串变量名称中提取名称。 – user2547308

+0

确保d2实际上是一个向量,看起来它只是一个单独的字符串(尝试消除'as.character')。它应该采用上面我的标签变量的格式。 – Michael

+0

c(“ICPSR会员号码”,“国会”,“会议室/类别”,“州”,“区域”,“聚会”,“POL方”,“全名”,“性别”,“区域” “STATE BORN(我...迈克尔 - 当它将名称放入第一列名称时,就是它的样子,看起来与您的格式相匹配。 – user2547308

相关问题