R +数据框架名称作为字符串变量

时间:2016-01-20 19:07:39

标签: r

我有一个数据框列表,我希望为列表中的每个数据框分配一个变量列,它是给定数据帧名称的简单字符向量。

data <- list(
    d1 = data.frame(animal = sample(c("cat","dog","bird"), 5, replace = T)),
    d2 = data.frame(animal = sample(c("cat","dog","bird"), 5, replace = T)),
    d3 = data.frame(animal = sample(c("cat","dog","bird"), 5, replace = T))
)

这会产生:

> data 
$d1
  animal
1    cat
2   bird
3    cat
4    cat
5    cat

$d2
  animal
1    dog
2    cat
3    cat
4    cat
5   bird

$d3
  animal
1    cat
2    dog
3    cat
4    cat
5    cat

我想要做的是创建如下内容:

> newdata 
$d1
  animal newvar
1    cat     d1
2    cat     d1
3    cat     d1
4    dog     d1
5    cat     d1

$d2
  animal newvar
1   bird     d2
2    cat     d2
3   bird     d2
4    cat     d2
5    cat     d2

$d3
  animal newvar
1   bird     d3
2   bird     d3
3    cat     d3
4    cat     d3
5   bird     d3

但我无法弄清楚如何实际引用数据框名称 - 在数据框列表中 - 并将其适当地转换为字符向量。

以下内容不起作用:

namefunc <- function(x) {
    x <- x %>% transform(newvar = as.character(x))
}

newdata <- namefunc(data)

2 个答案:

答案 0 :(得分:4)

我们可以使用Mapcbind list'数据'的names元素与{数据'Map(cbind, data, newvar= names(data))

$("#mySelectId").on("change",function(){
   relValue =$("#mySelectId option:selected").attr("rel");
   console.log("You rel value is "+relValue);
});

答案 1 :(得分:1)

%%
("Project"|"project")   return 'PROJECTCOMMAND';

"-au"                   return 'ADDUSER';
"-n"                    return 'NAMEOPTION';
"-k"                    return 'KEYOPTION';
"-desc"                 return 'DESCRIPTION';
("--add"|"-a")          return 'ADDOPTION';
<TEXT>[-a-zA-Z0-9@\.]+ {this.popState(); return 'TEXT';}
<INITIAL,TEXT>\s+
<<EOF>>                 return 'EOF';
/lex
%start line

%%

line
    : PROJECTCOMMAND options EOF
       {
          //enter code here
       }
    | PROJECTCOMMAND options TEXT EOF
       {
          //enter code here
       }
    ;
options
    : option
        {
          //enter code here
        }
    | options option
       {
          //enter code here
       }
    ;

option
    : ADDUSER
        {
          //enter code here
        }
    | NAMEOPTION
       {
          //enter code here
       }
    | KEYOPTION
        {
          //enter code here
        }
    | DESCRIPTION
       {
          //enter code here
       }
    | ADDOPTION
       {
          //enter code here
       }
    ;

或最终:

lapply(names(data), function(d) transform(data[[d]], newvar=d))