【发布时间】:2020-09-08 14:23:52
【问题描述】:
我有一个数据框df 并想使用函数range_frac 来执行操作。
set.seed(137)
df <- data.frame(col1 = sample(LETTERS, 100, TRUE),
col2 = sample(-75:75, 100, TRUE),
col3 = sample(-75:75, 100, TRUE))
df$col2[c(23, 48, 78)] <- NA
df$col3[c(37, 68, 81)] <- NA
range_frac <- function(n, my_df, my_var) {
len = sum(my_df[my_var] < n, na.rm = TRUE)
len
}
我想分别知道col2 和col3 中满足上述条件的行数。由于我没有成功传递列名,所以我传递了列索引(2,3)。但是,当我尝试为my_var 传递一个向量时,它会汇总各个值的输出。这是怎么发生的?
sapply(1:3, range_frac, my_df = df, my_var = 2)
[1] 57 57 57
sapply(1:3, range_frac, my_df = df, my_var = 3)
[1] 51 51 52
sapply(1:3, range_frac, my_df = df, my_var = 2:3)
[1] 108 108 109
有人可以解释第三次操作(即 57+51、57+51、57+52)的结果吗?
(基本上,我正在尝试以dyplr-summarise 的方式实现以下输出,但停留在这一点上并认为我会清除对这个概念的理解)。
n col2 col3
1 57 51
2 57 51
3 57 52
更新:我问了一个不清楚的问题,所以用更多信息更新它。解决方法如下:
对于每个n,解决方案可以理解为表达式的求值
sum(df[,2:3] < n, na.rm = TRUE) 而不是单独用于列 2&3。
【问题讨论】: