使用paste执行函数以在R中的数据帧中创建新变量
数据: 目标: 创建一个函数,该函数将接受数据帧名称和(新)变量名称的输入。 该职能将:使用paste执行函数以在R中的数据帧中创建新变量,r,function,R,Function,数据: 目标: 创建一个函数,该函数将接受数据帧名称和(新)变量名称的输入。 该职能将: 创建一个基于数据帧的行名称的新变量 删除行名称 对变量重新排序,以便新创建的 列是第一列 挑战: 我在第一步就被卡住了 我在互联网和stackoverflow上搜索了一些代码片段,这些代码片段可能会有所帮助,我设法找到了一些东西,尽管它无法工作。 我试过什么: structure(list(`p value` = c(0.00151124736422317, 0.804709799937324, 0.01
structure(list(`p value` = c(0.00151124736422317, 0.804709799937324,
0.0192537412780042, 0.000467854188597731, 4.80216666553605e-06,
0.0231434946595433), significance = c(TRUE, FALSE, TRUE, TRUE,
TRUE, TRUE)), .Names = c("p value", "significance"), row.names = c("Q5.i",
"Q5.ii", "Q5.iii", "Q5.iv", "Q5.v", "Q5.vi"), class = "data.frame")
row2col您不需要使用eval
、parse
、assign
——在许多情况下,这不是正确的方法。这里有一个简单的选择:
row2col<-function(df, varname){
eval(parse(text=paste(df, "[[", "'", varname, "'", "]]", "<-row.names(", df, ")", sep="")))
}
row2col<-function(df, varname){
assign(parse(text=paste(df, varname, sep="$")), row.names(df))
}
您不需要使用eval
、parse
、assign
——在许多情况下,这不是正确的方法。这里有一个简单的选择:
row2col<-function(df, varname){
eval(parse(text=paste(df, "[[", "'", varname, "'", "]]", "<-row.names(", df, ")", sep="")))
}
row2col<-function(df, varname){
assign(parse(text=paste(df, varname, sep="$")), row.names(df))
}
使用行名称创建新的var
> row2col(df, "testcol")
# testcol p value significance
#1 Q5.i 1.511247e-03 TRUE
#2 Q5.ii 8.047098e-01 FALSE
#3 Q5.iii 1.925374e-02 TRUE
#4 Q5.iv 4.678542e-04 TRUE
#5 Q5.v 4.802167e-06 TRUE
#6 Q5.vi 2.314349e-02 TRUE
data$new\u var使用行名称创建新的var
> row2col(df, "testcol")
# testcol p value significance
#1 Q5.i 1.511247e-03 TRUE
#2 Q5.ii 8.047098e-01 FALSE
#3 Q5.iii 1.925374e-02 TRUE
#4 Q5.iv 4.678542e-04 TRUE
#5 Q5.v 4.802167e-06 TRUE
#6 Q5.vi 2.314349e-02 TRUE
data$new\u var和我为第一个目标奋斗了半天……非常感谢!!!我为第一个目标奋斗了半天…非常感谢!!!R经验法则-如果您曾经使用eval
assign
parse
。。。。不要…:-)此功能已经存在,并且@alistaire感谢您的共享。我广泛使用dplyr包,甚至没有注意到它已经在那里了。R经验法则-如果您使用eval
assign
parse
。。。。不要…:-)此功能已经存在,并且@alistaire感谢您的共享。我广泛使用dplyr包,甚至没有注意到它已经在那里了。
row.names(data) <- NULL
data <- data[, c(ncol(data):(ncol(data) - 1))]