我有点初学者的问题。它与效率和使用较少的代码行有关。 (我计划在大学主修计算机科学,我认为在编码方面做得更好会很好!)我有一个包含45个变量和1000多个观测值的数据集,但我需要操纵3个变量并找到最低值这些专栏中的每一个。
例如,我在第11列中有变量1(称之为“var1”),第17列中有变量2(“var2”),第23列中有变量3(“var3”)。我有一个函数需要作为参数的字符串(var1,var2或var3)进入数据集中的该列,并循环遍历它并搜索最低值。
目前我的代码效率非常低:
whichLowest <- function(variable) {
# Function has some read.csv things and other pre-computational stuff here
if (variable == "var1")
varData <- subset(myDataset, select = colnames(stateData)[11])
else if (variable == "var2")
varData <- subset(myDataset, select = colnames(stateData)[17])
else if (variable == "var3")
varData <- subset(myDataset, select = colnames(stateData)[23])
else
stop("invalid outcome")
for (i in varData) {
# calculates lowest value in that column
}
正如您所看到的,我在for循环中有3个if语句,以找出赋予函数的变量。因为我有3个if语句,所以我觉得有一种更有效的方法可以做到这一点。我的想法就像分配var1,var2和var3一些数字然后做同样的事情。但是我不知道如何处理这个问题!
答案 0 :(得分:1)
如果您想按(字符串)变量名称查找数据框列,请选择该列的min
或which.min
(并且您不需要for循环:与大多数R函数一样,min
和which.min
被矢量化:
set.seed(103)
df = data.frame(var1 = sample(1:20, 10), var2 = sample(1:20, 10), var3 = sample(1:20, 10))
# var1 var2 var3
# 5 10 4
# 2 6 11
# 10 15 10
# 9 18 18
# 19 17 9
# 16 2 14
# 7 16 15
# 3 4 13
# 1 5 5
# 4 13 17
min(df[,'var2'])
# 2
yourvar = 'var1'
min(df[,yourvar])
# 1
yourvar = 'var2'
min(df[,yourvar])
# 2
yourvar = 'var3'
min(df[,yourvar])
# 4
如果您想通过列索引引用它,请像Matt O&#39; Brien show一样使用apply
。
答案 1 :(得分:0)
你想要这样的东西吗?
df <- data.frame(Var1=c(1,2,3), Var2=c(2,3,4), Var11=c(9,10,11))
apply(df, 2, min)
#Var1 Var2 Var11
# 1 2 9