r - 使用 lapply 计算多个数据帧中单列中的值
问题描述
我正在尝试计算数据框单列中特定值的出现百分比。我使用以下代码加载单个数据帧,并计算单列“计数器”中每个值的总计数。然后,我将它除以该数据框中存在的行数,以获得百分比。
test <- read.csv("./subdata/Bur01.csv")
test %>%
group_by(Counter) %>%
summarise(no_rows = length(Counter))
Counter no_rows
<int> <int>
1 2 176
2 5 49
3 7 343
table(test$Counter)/length(test$Counter)
2 5 7
0.30985915 0.08626761 0.60387324
但是,我有 187 个数据帧,它们都具有相同的结构(如列标题),但“计数器”列中有一组不同的值。我将它们全部加载到包含 187 个元素(名为 myfiles)的大列表中,如下所示:
temp <- list.files(path = "./subdata", pattern="*.csv", full.names=TRUE)
myfiles = lapply(temp, read.delim)
我是否能够编写一个函数或循环,只在每个单独的数据帧的“计数器”列中给出值的出现百分比,而不必分别进行每个操作?
谢谢!
解决方案
当然!
只需通过以下方式将您的函数应用于每个 data.frame lapply
:
props = lapply(myfiles, counter_props)
在哪里counter_props
:
counter_props = function (df) {
prop.table(df$Counter)
}
…但是如果这是此逻辑的唯一用途,您当然不需要为此定义命名函数:
props = lapply(myfiles, function (df) prop.table(df$Counter))
您还可以通过拆分此计算的不同步骤(使用“purrr”包)在管道中编写整个内容:
props = myfiles %>%
map(pull, Counter) %>%
map(table) %>%
map(prop.table)
(请注意,这prop.table
实际上与将表格除以总长度相同。)
推荐阅读
- python - Selenium 不支持的命令 selectWindow
- python - 使用 python 子进程使用带有 bashrc 文件的“源”linux 命令
- postgresql - 如何使用函数 regexp_split_to_table #postgresql 创建原子行
- python - 如何计算来自不同 lda 模型的主题之间的余弦相似度?
- offset - filebeat 注册表文件显示偏移量为 0
- python - 限制平衡每日覆盖率
- python - 通过计算雅可比行列有效地使用 PyTorch 的 autograd 和张量
- sql - UPDATE/MERGE 必须与每个目标行最多匹配一个源行
- python - 如何提高我在 google colab 中的代码速度 | 谷歌 Colab | 蟒蛇 |
- python - 如何将不对称的成对距离矩阵转换为字典?