如何将函数应用于多个列以在R中创建多个新列?

星状

我有序列aqi_range和数据df的列表

aqi_range = list(0:50,51:100,101:250)

df

   PM10_mean PM10_min PM10_max PM2.5_mean PM2.5_min PM2.5_max
 1      85.6        3      264       75.7         3       240
 2     105.         6      243       76.4         3       191
 3      95.8       19      287       48.4         8       134
 4      85.5       50      166       64.8        32       103
 5      55.9       24      117       46.7        19        77
 6      37.5        6      116       31.3         3        87
 7      26          5       69       15.5         3        49
 8      82.3       34      169       49.6        25       120
 9      170        68      272       133         67       201
10      254       189      323       226        173       269

现在,我已经创建了这两个非常简单的函数,我希望将此函数应用于此数据框,以计算每种污染物AQI =空气质量指数

#a = column from a dataframe  **PM10_mean, PM2.5_mean**
#b = list of sequences defined above
min_max_diff <- function(a,b){
        for (i in b){
          if (a %in% i){
           min_val = min(i)
           max_val = max(i)
           return (max_val - min_val)
        }}}

#a = column from a dataframe  **PM10_mean, PM2.5_mean**
#b = list of sequences defined above
c_low <- function(a,b){
      for (i in b){
       if (a %in% i){
        min_val = min(i)
        return(min_val)
          } 
      }}

基本上,第一个函数“ min_max_diff”采用列df $ PM10_mean / df $ PM2.5_mean的值,并在列表“ aqi_range”中进行检查,然后返回某个值(该值所在的序列的最小值和最大值之间的差可用)。同样,第二个函数“ c_low”仅返回序列的最小值。

我想对PM10_mean列应用这种操作(下面定义的公式)以创建新列PM10_AQI:

df$PM10_AQI  = min_max_diff(df$PM10_mean,aqi_range) / (df$PM10_max - df$PM10_min) / * (df$PM10_mean -  df$PM10_min) + c_low(df$PM10_mean,aqi_range)

我希望它能正确解释。

马斯特罗皮

如果您的问题只是如何将给定的转换计算到数据帧中的几列,则可以编写一个for循环,使用字符串转换函数(在这种情况下sub()非常有用)构造转换中涉及的每个变量的名称,使用[表示法(表示法相反,$因为该[表示法接受字符串来指定列)。

下面,我展示了这样的代码示例,其中包含少量样本数据和3个观察结果:

(请注意,我修改了AQI范围值(现在我只是定义了出现时间点的范围内改变--assuming他们都是整数)的定义,你的功能min_max_diff()c_low()它们合并为一个单一的函数返回的最小值和最大值找到该值的AQI范围-再次假设AQI值为整数值)

# Definition of the AQI ranges (which are assumed to be based on integer values)
# Note that if the number of AQI ranges is k, the number of breaks is k+1
# Each break value defines the minimum of the range
# The maximum of each range is computed as the "minimum of the NEXT range" - 1
# (again this assumes integer values in AQI ranges)
# The values (e.g. PM10_mean) whose AQI range is searched for are assumed
# to NOT be larger than or equal to the largest break value.
aqi_range_breaks = c(0, 51, 101, 251)

# Example data (top 3 rows of the data frame you provided)
df = data.frame(PM10_mean=c(85.6, 105.0, 95.8),
                PM10_min=c(3, 6, 19),
                PM10_max=c(264, 243, 287),
                PM2.5_mean=c(75.7, 76.4, 48.4),
                PM2.5_min=c(3, 3, 8),
                PM2.5_max=c(240, 191, 134))

# Function that returns the minimum and maximum AQI values
# of the AQI range where the given values are found
# `values`: array of values that are searched for in the AQI ranges
# defined by the second parameter.
# `aqi_range_breaks`: breaks defining the minimum values of each AQI range
# plus one last value defining a value never attained by `values`.
# (all values in this parameter defining the AQI ranges are assumed integer values)
find_aqi_range_min_max <- function(values, aqi_range_breaks){
  aqi_range_groups = findInterval(values, aqi_range_breaks)
  return( list(min=aqi_range_breaks[aqi_range_groups],
               max=aqi_range_breaks[aqi_range_groups + 1] - 1))
}

# Run the variable transformation on the selected `_mean` columns
vars_mean = c("PM10_mean", "PM2.5_mean")
for (vmean in vars_mean) {
  vmin = sub("_mean$", "_min", vmean)
  vmax = sub("_mean$", "_max", vmean)
  vaqi = sub("_mean$", "_AQI", vmean)
  aqi_range_min_max = find_aqi_range_min_max(df[,vmean], aqi_range_breaks)
  df[,vaqi] = (aqi_range_min_max$max - aqi_range_min_max$min) / 
              (df[,vmax] - df[,vmin]) / (df[,vmean] -  df[,vmin]) +
              aqi_range_min_max$min
}

请注意如何使用该findInterval()函数来查找值数组落在的范围这是使转换适用于数据框列的关键。

该过程的预期输出为:

  PM10_mean PM10_min PM10_max PM2.5_mean PM2.5_min PM2.5_max  PM10_AQI    PM2.5_AQI
1      85.6        3      264       75.7         3       240  51.00227 51.002843893
2     105.0        6      243       76.4         3       191 101.00635 51.003550930
3      95.8       19      287       48.4         8       134  51.00238  0.009822411

请检查用于计算AQI的公式,因为其中存在语法错误(请查找/ */我的代码中的公式已将其替换为)。

请注意,仅在字符串出现在变量名的末尾时,才$使用in中sub()用于匹配字符串的正则表达式"_mean"替换"_mean"字符串。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何创建将函数应用于数据集中多个列的R函数?

来自分类Dev

将函数应用于多个并发列并输出到新列-R

来自分类Dev

将R函数应用于多个列并生成输出

来自分类Dev

如何使用groupby将多个函数应用于Pandas中的多个列?

来自分类Dev

如何将函数应用于依赖多个列的groupby子组?

来自分类Dev

如何将函数应用于多列以在 Pandas 中创建多列?

来自分类Dev

如何将函数应用于r中的多个列表?

来自分类Dev

如何将单变量函数应用于R中的多个列表

来自分类Dev

如何将用户定义的函数应用于BigQuery SQL中的多个列?

来自分类Dev

如何将多个函数应用于numpy数组?

来自分类Dev

如何将特定列应用于R中的sapply函数?

来自分类Dev

r将多个条件应用于多个列(函数参数值的向量)

来自分类Dev

将多个函数应用于data.table中的多个列

来自分类Dev

按组将多个函数应用于data.table中的多个列

来自分类Dev

使用 Args 将函数应用于多个 Pandas 列

来自分类Dev

将多个函数应用于一列

来自分类Dev

将函数应用于DataFrame并创建新列

来自分类Dev

如何将函数应用于两列以创建第三列

来自分类Dev

将函数应用于两个DataFrame列并从结果中创建新列

来自分类Dev

如何将此函数应用于r中数据框中的多个元素?

来自分类Dev

如何将函数应用于jq中的多个字段

来自分类Dev

如何将汇总功能应用于数据表的多个列

来自分类Dev

如何将R中的函数应用于由另一列分组的数据帧的某些列?

来自分类Dev

熊猫:如何将函数应用于不同的列

来自分类Dev

如何将 NTILE 函数应用于 SQL 列

来自分类Dev

将MinMaxScaler应用于PySpark中的多个列

来自分类Dev

如何将权重应用于数据框中的特定列以汇总新的“得分”列?

来自分类Dev

如何将权重应用于数据框中的特定列以汇总新的“得分”列?

来自分类Dev

在熊猫中,如何将函数应用于返回两列的每一列

Related 相关文章

  1. 1

    如何创建将函数应用于数据集中多个列的R函数?

  2. 2

    将函数应用于多个并发列并输出到新列-R

  3. 3

    将R函数应用于多个列并生成输出

  4. 4

    如何使用groupby将多个函数应用于Pandas中的多个列?

  5. 5

    如何将函数应用于依赖多个列的groupby子组?

  6. 6

    如何将函数应用于多列以在 Pandas 中创建多列?

  7. 7

    如何将函数应用于r中的多个列表?

  8. 8

    如何将单变量函数应用于R中的多个列表

  9. 9

    如何将用户定义的函数应用于BigQuery SQL中的多个列?

  10. 10

    如何将多个函数应用于numpy数组?

  11. 11

    如何将特定列应用于R中的sapply函数?

  12. 12

    r将多个条件应用于多个列(函数参数值的向量)

  13. 13

    将多个函数应用于data.table中的多个列

  14. 14

    按组将多个函数应用于data.table中的多个列

  15. 15

    使用 Args 将函数应用于多个 Pandas 列

  16. 16

    将多个函数应用于一列

  17. 17

    将函数应用于DataFrame并创建新列

  18. 18

    如何将函数应用于两列以创建第三列

  19. 19

    将函数应用于两个DataFrame列并从结果中创建新列

  20. 20

    如何将此函数应用于r中数据框中的多个元素?

  21. 21

    如何将函数应用于jq中的多个字段

  22. 22

    如何将汇总功能应用于数据表的多个列

  23. 23

    如何将R中的函数应用于由另一列分组的数据帧的某些列?

  24. 24

    熊猫:如何将函数应用于不同的列

  25. 25

    如何将 NTILE 函数应用于 SQL 列

  26. 26

    将MinMaxScaler应用于PySpark中的多个列

  27. 27

    如何将权重应用于数据框中的特定列以汇总新的“得分”列?

  28. 28

    如何将权重应用于数据框中的特定列以汇总新的“得分”列?

  29. 29

    在熊猫中,如何将函数应用于返回两列的每一列

热门标签

归档