使用 lapply 和 which 按特征和功能对数据帧进行子集化

2024-03-14

我有一个包含 5 个维度数据的数据框,如下所示:

> dim(alldata)
[1] 162   6
> head(alldata)
         value layer Kmultiplier Resolution      Season           Variable
1:  0.01308008     b        .01K        1km    Baseflow Evapotranspiration
2:  0.03974779     b        .01K        1km   Peak Flow Evapotranspiration
3:  0.02396524     b        .01K        1km Summer Flow Evapotranspiration
4: -0.15670996     b        .01K        1km    Baseflow          Discharge
5:  0.06774948     b        .01K        1km   Peak Flow          Discharge
6: -0.04138313     b        .01K        1km Summer Flow          Discharge

我想做的是根据其他列获取数据的某些“特征”的值列的平均值。因此,我使用它将数据子集仅包含我感兴趣的变量,例如:

> subset=alldata[which(alldata$Variable=="Discharge" & alldata$Resolution=="1km" & alldata$Season=="Peak Flow"),]
> subset
          value layer Kmultiplier Resolution    Season  Variable
1:  0.067749478     b        .01K        1km Peak Flow Discharge
2:  0.058260448     b         .1K        1km Peak Flow Discharge
3: -0.223953725     b         10K        1km Peak Flow Discharge
4:  0.272916114     g        .01K        1km Peak Flow Discharge
5:  0.240135025     g         .1K        1km Peak Flow Discharge
6: -0.216730348     g         10K        1km Peak Flow Discharge
7:  0.088966500     s        .01K        1km Peak Flow Discharge
8: -0.018943754     s         .1K        1km Peak Flow Discharge
9: -0.008339365     s         10K        1km Peak Flow Discharge

这就是我被困住的地方。假设我想要“层”列中每个值的平均值的向量或列表...所以我最终会得到 3 个数字,一个代表“b”,一个代表“g”,一个代表“s”。我需要制作一堆这样的子集,我认为应用函数可以提供帮助,但在多个教程和堆栈问题之后我无法让它工作。一个更简单的例子也很好,像这样:

> A=data.frame(seq(1,9),rep(c("a","b","c"),3),c(rep("type1",3),rep("type2",3),rep("type3",3)),c(rep("place1",2),rep("place2",2),rep("place3",2),rep("place1",2),rep("place2",1)))
> names(A)=c("value","Letter","Type","Place")
> A
  value Letter  Type  Place
1     1      a type1 place1
2     2      b type1 place1
3     3      c type1 place2
4     4      a type2 place2
5     5      b type2 place3
6     6      c type2 place3
7     7      a type3 place1
8     8      b type3 place1
9     9      c type3 place2

在这个简单的示例中,我需要按字母列出的“place1”列“value”的平均值,它应该以任何格式返回类似:“a=平均值,b=平均值,c=平均值”作品。

这是应用功能的工作吗?如果是这样,怎么办?如果没有,请告诉我一个更好的替代方法来对我的数据进行子集化。

谢谢你!


在您给出的示例数据集上实现的替代解决方案,并且不使用任何apply家庭在这里发挥作用。

Using dplyr package

library(dplyr)
A %>% 
 group_by_(.dots = c("Place","Letter")) %>% 
 summarise(MEAN = mean(value))

# Source: local data frame [6 x 3]
# Groups: Place [?]

#    Place Letter  MEAN
#    <fctr> <fctr> <dbl>
# 1 place1      a     4
# 2 place1      b     5
# 3 place2      a     4
# 4 place2      c     6
# 5 place3      b     5
# 6 place3      c     6

OR

Using by()功能

> by(A$value, A[,c(2,4)], FUN = mean)
# Letter: a
# Place: place1
# [1] 4
# ------------------------------------------------------------ 
# Letter: b
# Place: place1
# [1] 5
# ------------------------------------------------------------ 
# Letter: c
# Place: place1
# [1] NA
# ------------------------------------------------------------ 
# Letter: a
# Place: place2
# [1] 4
# ------------------------------------------------------------ 
# Letter: b
# Place: place2
# [1] NA
# ------------------------------------------------------------ 
# Letter: c
# Place: place2
# [1] 6
# ------------------------------------------------------------ 
# Letter: a
# Place: place3
# [1] NA
# ------------------------------------------------------------ 
# Letter: b
# Place: place3
# [1] 5
# ------------------------------------------------------------ 
# Letter: c
# Place: place3
# [1] 6
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 lapply 和 which 按特征和功能对数据帧进行子集化 的相关文章

  • 为什么 Jupyter 突然将数据框显示为基于文本的?

    我已经使用 jupyter 笔记本有一段时间了 如果我这样做的话df head 它总是返回一个格式良好的表格格式 现在我调用了数据 我得到了这个 为什么 我该如何解决它 import pandas as pd df pd read csv
  • 带有 dplyr::do 的匿名函数 - 使用 rle 的结果来过滤数据

    我有按主题 id 分组的时间序列数据 这些数据保留在某个 站点 上 并且在每个 时间 步骤中都有某个 阶段 有时受试者从一个站点切换到另一个站点 并且可能会再次返回 如果个人更换站点来回 例如 从站点 a 到站点 b 然后返回站点 a an
  • 通过使用 dplyr 对变量进行分组来将多列的响应制成表格

    你好 我是 plyr dplyr 系列的新手 但很喜欢它 我可以看到它对我自己的工作有巨大的实用性 但我仍在努力解决它 我有一个如下所示的数据框 1 如何为每个非分组变量生成一个表格 以显示分组变量每个值内的响应分布 2 注意 我确实有一些
  • R中特定小时和月份的数据框中的平均值

    我一直在网上搜索 但还没有找到解决这个可能很简单的问题的方法 这是使用库 xts 的半小时数据 library xts data xts lt as xts 1 nrow data as POSIXct 2007 08 24 17 30 0
  • 从具有重复元素的向量生成所有独特的组合

    这个问题之前曾被问过 但仅适用于具有非重复元素的向量 我无法找到一个简单的解决方案来从具有重复元素的向量中获取所有组合 为了说明这一点 我在下面列出了一个例子 x lt c red blue green red green red 向量 x
  • 将日期添加到日历热图 R

    I m plotting a calender heat map using Paul Bleicher s calenderHeat R code https raw githubusercontent com iascchen VisH
  • 将命名参数传递给调用非 mutate 函数的函数

    我正在尝试做一些非常类似的事情here https community rstudio com t passing named list to mutate and probably other dplyr verbs 2553 11 本质
  • 获取因子变量中水平和标签之间的原始关联

    我正在寻找一个函数来获取因子变量的原始映射表 我导入一个 Rdata 文件 我有一个名为 FactVar 的因子变量 我知道 FactVar 的映射表如下 010025 gt city1 015146 gt city2 048017 gt
  • 在单词后获取文本——R Webscraping

    几周前 这里有人帮助我极大地获得了名人数据库中所有链接的列表 我能够运行此代码并获得以下输出 library purrr library rvest url base lt https www nndb com lists 494 0000
  • 使用ggmap在地图上绘制等高线

    我有洛杉矶港地区的颗粒物浓度差异 之后 之前 我正在尝试使用 ggmap 在地图上绘制浓度等值线 但结果看起来很不同 我使用的代码如下所示 数据位于代码下方 Code 安装 packages ggmap library ggmap PM r
  • R:计算数据框的边距或行和列总和

    我有一个如下所示的数据框 Flag1 Flag2 Type1 Type2 Type3 1 A FIRST 2 0 0 2 A SECOND 1 9 0 3 A THIRD 3 7 0 4 A FOURTH 9 18 0 5 A FIFTH
  • 在数据帧中的几行上提取具有匹配模式的 id

    这是我正在处理的数据框的示例 id string 1 no 1 yes 1 yes 2 no 2 yes 3 yes 3 yes 3 no 我想提取id为此最后两行包含字符串 yes 对于列string 所以结果是 id string 1
  • 控制绘图中 x 轴上出现哪些刻度线/标签?

    我想控制 X 轴上显示的刻度线 以下代码将刻度线放置在 5 的序列中 位于 5 10 15 30 library plotly df lt data frame x 1 30 y sample 100 300 size 30 replace
  • 从 Rcpp C++ 函数获取 r 函数参数

    我在 R 端定义了一个函数 如下所示 foo lt function arg1 arg2 arg3 以及使用 Rcpp 的 C 函数 该函数获取全局环境并实例化 R 函数以从该函数执行它 这是代码 namespace Rcpp void m
  • R:在组上应用函数

    我希望将函数应用于数据框 然后将该函数的结果存储在数据框中的新列中 这是我的数据框 tradeData 的示例 Login AL Diff a 1 0 a 1 0 a 1 0 a 0 1 a 0 0 a 0 0 a 0 0 a 1 1 a
  • 如何在 R 中手动编写正态分布核的似然值?

    具体来说 如何编码 x 和 mu 之差的乘积 精度矩阵以及 x 和 mu 之差的转置 我下面的代码正确吗 提前致谢 colSums dat mu mat solve sigma colSums dat mu mat 其中 mu mat 是重
  • data.frame 不会破坏列名

    有没有办法使用 data frame 而不破坏列名 我有以下结构 Canon PowerShot 1 9 997803e 01 9 997318e 01 3 327920e 01 3 327920e 01 9 988220e 01 6 4
  • 在ggplot2中按线连接分组点

    我试图将每组的每个蓝点与其相应的红点连接起来 但是 我在使用时遇到问题geom segment 谢谢帮助 repl lt data frame title c A B C A B C diff c 10 06 1 89 12 79 10 0
  • ggplot2:从纵横比中排除图例

    I use ggplot2 and knitr发布带有右侧图例的散点图 图例包含在纵横比中 因此破坏了绘图的 方形 如图所示默认主题 https github com hadley ggplot2 wiki themes 当图例文本变得比
  • 如何在R中制作渐变颜色填充时间序列图

    How to 填充区域 sp 线下方和上方渐变色 这个例子是在 Inkscape 中绘制的 但我需要垂直渐变 不是水平的 间隔从zero to positive 来自white to red 间隔从zero to negative 来自wh

随机推荐