0mm*_*mm3 5 variables r function dataframe
我对 R 和一般编程相当陌生,并且已经在以下几个小时内苦苦挣扎。
我正在尝试创建一个函数,该函数将 df 和列名作为变量,根据提供的列名过滤表并打印输出。
example_function <- function(df=df, col=col){
         a <- df[col == 100,]
         b <- filter(df, col == 100)
         print(a)
         print(b)
}
使用example_function(df=example_df, col='percentage')不起作用,两个变量仅返回列名,但不返回数据行(尽管有值== 100)。
使用example_function(df=df, col=percentage),因此百分比在这里没有用引号引起来,我得到:
[.data.frame(df, col == 100,)中的错误:未找到对象“百分比”
然而,当我运行时example_function(df=example_df, col=example_df$percentage),我得到了正确的结果,我的数据帧按预期返回,只有那些等于example_df$percentage100 的行。
我真的希望能够将 df 作为一个变量传递,将列作为另一个变量传递,而不必example_df$percentage每次都键入,因为我希望能够为许多不同的数据帧重复使用该函数,并且键入看起来多余的内容。
基于此,我然后修改了该函数,认为我可以df$col在该函数中使用它,它将评估example_df$percentage并像上面一样工作:
example_function <- function(df=df, col=col){
     a <- df[df$col == 100,]
     b <- filter(df, df$col == 100)
     print(a)
     print(b)
}
但现在我在使用example_function(df=example_df, col=percentage)或传递时遇到另一个错误col='percentage':
filter_impl(.data, quo) 中的错误:结果的长度必须为 19,而不是 0
任何人都可以帮助我解决这个问题,或者为我指明正确的方向以理解为什么我正在做的事情不起作用吗?
非常感谢
这是我正在使用的数据框的示例(虽然我真正的数据框会有更多列,但我希望它不会对这个示例产生影响。)
 name    | percentage
    -----------------------
    tom      |  80
    john     |  100
    harry    |  99
    elizabeth|  100
    james    |  50
  example_df <- structure(list(name = structure(c(5L, 4L, 2L, 1L, 3L), .Label = c("elizabeth", 
    "harry", "james", "john", "tom"), class = "factor"), percentage = c(80L, 
    100L, 99L, 100L, 50L)), .Names = c("name", "percentage"), class = "data.frame", row.names = c(NA, 
    -5L))
** 更新:我设法让它与以下内容一起工作:
example_function <- function(df=df, col=col){
     a <- df[df[col] == 100,]
     print(a)
}
通过example_function(df=example_df, col='percentage')
第一行example_function应该是
a <- df[df[[col]] == 100,]
当你分解它时,df[['names']] == 100会给你一个逻辑列表,对应于哪些行的df值为names100。但是'names' == 100这是无意义的:它总是错误的。  
| 归档时间: | 
 | 
| 查看次数: | 1975 次 | 
| 最近记录: |