r - 跨多列应用函数并写入 R 中的 csv
问题描述
R初学者,我的问题是:如何更改此功能,以便它可以在我的所有时间段内使用,而无需一遍又一遍地复制和粘贴该功能?时间段在函数中由from = X$pre.start1[i]
和to = X$pre.start2[i]
参数指示。我也希望所有结果都包含在一个 .csv 文件中。那可能吗?我知道此功能有效,并且我过去曾通过复制它并更改时间段来使用它,但是对于具有此类数据的多个电子表格,以这种方式应用很乏味。因此,我希望对其进行修改,以免复制和粘贴数百次。
功能:
ADIanalyzeFUN <- function(X) {
adianalyzeFUN <- function(X, i){
r <- read_wave(X$sound.files[i], from = X$pre.start1[i], to = X$pre.start2[i])
soundfile.adi <- acoustic_diversity(r)
return(soundfile.adi$adi_left)
return(soundfile.adi$adi_right)
}
output <- vector("logical", ncol(X))
for (i in seq_along(X$sound.files)) {
output[[i]] <- adianalyzeFUN(X, i)
}
X$adi.values.pre1to2 <-output
write.csv(X, "/media/parks/Seagate Portable Drive 2 (2tb)/Parks/2021 Threat Experiment/ADI index values/ADI01.csv", row.names = TRUE)
}
下面是数据示例 每列是以秒为单位的时间列表,我将该函数应用于波文件的一次和下一次之间,例如在 pre.start1 和 pre.start2 之间。
pre.start1 pre.start2 pre.start3 pre.start4 pre.start5 pre.start6 pre.start7 pre.start8 pre.start9 pre.start10 pre.end duringpb.start1
1 2304 2364 2424 2484 2544 2604 2664 2724 2784 2844 2904 2964
2 1386 1446 1506 1566 1626 1686 1746 1806 1866 1926 1986 2046
3 1680 1740 1800 1860 1920 1980 2040 2100 2160 2220 2280 2340
4 1553 1613 1673 1733 1793 1853 1913 1973 2033 2093 2153 2213
5 1661 1721 1781 1841 1901 1961 2021 2081 2141 2201 2261 2321
6 1728 1788 1848 1908 1968 2028 2088 2148 2208 2268 2328 2388
duringpb.end1 duringpb.start2 duringpb.end2 duringpb.start3 duringpb.end3 duringpb.start4 duringpb.end4 duringpb.start5 duringpb.end5
1 3024 3084 3144 3204 3264 3324 3384 3444 3504
2 2106 2166 2226 2286 2346 2406 2466 2526 2586
3 2400 2460 2520 2580 2640 2700 2760 2820 2880
4 2273 2333 2393 2453 2513 2573 2633 2693 2753
5 2381 2441 2501 2561 2621 2681 2741 2801 2861
6 2448 2508 2568 2628 2688 2748 2808 2868 2928```
Thanks for any help!
I would like the output to be something like:
X pre.start1-pre.start2 pre.start2-pr.estart3 pre.start3-pre.start4
1 0.86 0.56 0.89
2 0.27 0.09 0.03
3 0.18 0.10 0.55
4 0.39 0.52 0.74
5 0.14 0.17 0.97
6 0.91 0.64 0.71
解决方案
你可以使用purrr
包和他们的地图变体称为map2_df()
(这个包是的一部分Tidyverse
)
您的示例不容易重现,因此这是一个示例,该示例从日期集中获取 2 个第一列,iris
并使用每行的总和构造一个数据框(tibble
在本例中为 a)并将其放入一个数据框中。
library(tidyverse)
iris %>% tibble
#> # A tibble: 150 × 5
#> Sepal.Length Sepal.Width Petal.Length Petal.Width Species
#> <dbl> <dbl> <dbl> <dbl> <fct>
#> 1 5.1 3.5 1.4 0.2 setosa
#> 2 4.9 3 1.4 0.2 setosa
#> 3 4.7 3.2 1.3 0.2 setosa
#> 4 4.6 3.1 1.5 0.2 setosa
#> 5 5 3.6 1.4 0.2 setosa
#> 6 5.4 3.9 1.7 0.4 setosa
#> 7 4.6 3.4 1.4 0.3 setosa
#> 8 5 3.4 1.5 0.2 setosa
#> 9 4.4 2.9 1.4 0.2 setosa
#> 10 4.9 3.1 1.5 0.1 setosa
#> # … with 140 more rows
map2_df(
.x = iris$Sepal.Length,
.y = iris$Sepal.Width,
.f = ~ tibble("sum" = sum(c(.x, .y)))
)
#> # A tibble: 150 × 1
#> sum
#> <dbl>
#> 1 8.6
#> 2 7.9
#> 3 7.9
#> 4 7.7
#> 5 8.6
#> 6 9.3
#> 7 8
#> 8 8.4
#> 9 7.3
#> 10 8
#> # … with 140 more rows
由reprex 包(v2.0.1)于 2021-09-04 创建
推荐阅读
- c - 在 C 中使用指针反转字符串(必须使用无符号 *char)
- c# - 当我的 Xamarin Android 应用程序停止时,如何接收推送通知?
- vba - 如何使用 VBA 显示总计行?
- node.js - 避免在多个文件中多次要求相同的东西
- regex - 查找两个开始和结束参数之间的文本匹配
- amazon-dynamodb - 为什么 DynamoDB 为属性名称添加 NULL 后缀?
- powershell - 如何使用 PowerShell 通过串行端口向监视器发送十六进制命令
- c# - 如何在 C# 中迭代 Resources.resx?
- maven - 使用 Maven 在 Azure DevOps 中构建多模块项目的 Jacoco 代码覆盖率问题
- c# - 每个超过 3 个字母的单词都以大写开头 + 第一行是大写 - 快速提问