gpt4 book ai didi

r - 映射数据框列,如果列满足条件,则对数据应用功能

转载 作者:行者123 更新时间:2023-12-03 16:10:54 26 4
gpt4 key购买 nike

我正在从Google Analytics(分析)API中提取数据,在本地进行处理,然后将.Rmd文件编织为文本,表格和可视化文件。作为编织/针刺过程的一部分,我正在做一些基本的格式化操作(例如,四舍五入百分比并添加%符号)。

对于这个问题,我有toPercent(),如果这样使用,它可以正常工作:

toPercent <- function(percentData){
percentData <- round(data, 2)
percentData <- mapply(toString, percentData)
percentData <- paste(percentData, "%", sep="")
}

devices <- toPercent(devices$avgSessionDuration)


但是,为每个表手动设置该功能会占用大量时间。我创建了 percentCheck()来查找与我的条件匹配的列:

percentCheck <- function(data){
data[,grep("rate|percent", names(data), ignore.case=TRUE)] <- toPercent(data[,grep("rate|percent", names(data), ignore.case=TRUE)])
}

devices <- percentCheck(devices)


但是我知道这不适用于具有多个匹配项的数据集(例如 exitRate的列和 bounceRate的列)。

Q1:我写的 toPercent()是否不会将多个值返回到一个条目?

问题2:如何构造 percentCheck()以映射到数据集并仅在列名称包含给定字符串的情况下应用 toPercent()

版本/软件包:

R version 3.1.1 (2014-07-10) -- "Sock it to Me"
library(rga)
library(knitr)
library(stargazer)


数据:

> dput(devices)
structure(list(deviceCategory = c("desktop", "mobile", "tablet"
), sessions = c(817, 38, 1540), avgSessionDuration = c(153.424888853179,
101.942758538617, 110.270988142292), bounceRate = c(39.0192297391397,
50.2915625371891, 50.1343873517787), exitRate = c(25.3257456030279,
32.0236280487805, 29.0991902834008)), .Names = c("deviceCategory",
"sessions", "avgSessionDuration", "bounceRate", "exitRate"), row.names = c(NA,
-3L), class = "data.frame")

最佳答案

如何进行此修改:

percentCheck <- function(data){
idx <- grepl("rate|percent", names(data), ignore.case=TRUE)
data[idx] <- lapply(data[idx], function(x) paste0(sprintf("%.2f", round(x,2)), "%"))
return(data)
}


在这里,我首先使用 grepl来创建和索引满足指定条件的列。然后,在 lapply中使用此索引将其应用于所有这些列,并且所应用的函数与您的 toPercent函数类似,只是我发现它像这样更紧凑。

现在,您可以一次将其应用于整个数据集:

percentCheck(devices)
# deviceCategory sessions avgSessionDuration bounceRate exitRate
#1 desktop 817 153.4249 39.02% 25.33%
#2 mobile 38 101.9428 50.29% 32.02%
#3 tablet 1540 110.2710 50.13% 29.10%

关于r - 映射数据框列,如果列满足条件,则对数据应用功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25407699/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com