R 在数据帧中使用语法困难的字符串作为列名

R 在数据帧中使用语法困难的字符串作为列名,r,string,syntax,dataframe,names,R,String,Syntax,Dataframe,Names,我使用的数据帧与下面的摘录类似: df <- data.frame(A=c("Some messy string to be used",222,0), B=c("Very important ? indicator from 2001", 888, 44), C=c("001 This variable / makes no sense", 888, 44), D=c("Geograp

我使用的数据帧与下面的摘录类似:

df <- data.frame(A=c("Some messy string to be used",222,0), 
                 B=c("Very important ? indicator from 2001", 888, 44),
                 C=c("001 This variable / makes no sense", 888, 44),
                 D=c("Geography", 1, 2))
我知道所使用的字符串对于
make.names
进行有意义的转换非常混乱。我怎样才能迫使R以更有效的方式使用这些混乱的字符串?根据经验,我想:

  • 保留数字(因为它们与时间相对应)
  • 从课文中至少保留几个开头的单词
  • 确保名称是唯一的
  • 整个解决方案必须相当通用,因为第一行中有大量垃圾(通常是空格或特殊字符)

  • 您根本不需要使用
    make.names
    ——您可以直接分配字符串。这在R中工作得非常好。当您尝试将名称用作R名称时,只需反勾引号(例如,
    $
    运算符之后):


    您根本不需要使用
    make.names
    ——您可以直接分配字符串。这在R中工作得非常好。当您尝试将名称用作R名称时,只需反勾引号(例如,
    $
    运算符之后):


    在data.frame中使用
    stringsAsFactors=F
    ,它会将列创建为char而不是factors。然后在上面写上名字

    df <- data.frame(A=c("Some messy string to be used",222,0), 
                 B=c("Very important ? indicator from 2001", 888, 44),
                 C=c("001 This variable / makes no sense", 888, 44),
                 D=c("Geography", 1, 2),stringsAsFactors = F)
    names(df) <- make.names(df[1,])
    names(df)
    

    df在data.frame中使用
    stringsAsFactors=F
    ,它会将列创建为char而不是factors。然后在上面写上名字

    df <- data.frame(A=c("Some messy string to be used",222,0), 
                 B=c("Very important ? indicator from 2001", 888, 44),
                 C=c("001 This variable / makes no sense", 888, 44),
                 D=c("Geography", 1, 2),stringsAsFactors = F)
    names(df) <- make.names(df[1,])
    names(df)
    

    df您可能需要
    unlist
    make.names(unlist(df[1,])
    您获得
    X1:X5
    的原因是
    df
    列是
    因子
    并且您在强制后获得了数字索引,随后通过在
    X
    后面添加
    make.unique
    @akrun,我建议您将其作为答案发布,因为建议的解决方案工作正常。您可能需要
    unlist
    ,即
    make.names(unlist(df[1,])
    获得
    X1:X5
    的原因是
    df
    列是
    因子,并且强制后获得了数字索引,这是后来通过在
    X
    中添加
    make.unique
    @akrun来转换的,我建议您将其作为一个答案发布,因为建议的解决方案效果很好。@KonradRudloph感谢它的效果。稍微麻烦的是,在使用名称时需要添加``但这不是一项主要任务。@Konrad:当然,您也可以通过对data.frame进行子集设置来选择列,而不必使用
    $
    ,例如
    df[,“要使用的一些乱七八糟的字符串”]
    @KonradRudloph感谢它的工作。稍微麻烦的是在使用名称时需要添加``但这不是一项主要任务。@Konrad:当然,您也可以通过子集data.frame来选择列,而不使用
    $
    ,例如
    df[,“要使用的一些凌乱字符串”]
    names(df) = unlist(df[1,])
    df$`Some messy string to be used`
    
    df <- data.frame(A=c("Some messy string to be used",222,0), 
                 B=c("Very important ? indicator from 2001", 888, 44),
                 C=c("001 This variable / makes no sense", 888, 44),
                 D=c("Geography", 1, 2),stringsAsFactors = F)
    names(df) <- make.names(df[1,])
    names(df)