我对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$percentage
等于100的行。
我真的希望能够将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')
答案 0 :(得分:1)
example_function
的第一行应为
a <- df[df[[col]] == 100,]
当你将其分解时,df[['names']] == 100
将为您提供一个逻辑列表,这些逻辑对应于df
的{{1}}值为100的行。但names
是荒谬的:它总是假的。