计算网格每个“单元格”中的数据点数量

问题描述 投票:0回答:1

我有一个包含三列的数据框,Subject、Rt1 和 Rt2。

df<-data.frame(Subject = c(rep(1,15), rep(2,15)), RT1=rep(seq(100,1500,100),2), RT2 = rep(seq(200,3000,200),2))

出于各种原因,我想计算每个主题落在 4*4 网格的每个单元格上的数据点的数量/频率。在这里,2 个受试者的数据点是相同的,但对于实际数据,情况并非如此。

例如,假设我的网格的值为:

x_axis<-c(220,350,700,1250,1800)
y_axis<-(100,700,1400,2500,3500)

所以基本上我只想得到一些东西,返回上面网格每个单元格中的点数,期望的输出类似于:

df2<-data.frame("<x1"= c(1,0,0,0,0),
                "x1-x2"= c(0,2,0,0,0),
                "x2-x3"= c(0,0,4,0,0),
                "x4-x5"= c(0,0,0,3,0)
                )

请注意,此示例仅针对一个主题(为了清楚起见)

我确实知道如何做到这一点,只需计算每个“案例”中的点数,例如:

df%>%
  group_by(Subject)%>%
  count(between(df$RT1,0,180),between(df$RT2 ,0,210))%>%
  set_names(c("RT1","RT2","n"))%>%
  filter(if_all(RT1:RT2, ~ . %in% TRUE))

但是,这是非常低效的,因为我应该为所有条件的每个单元格粘贴此代码。

我也有一个使用表格和剪切的解决方案,但我不知道如何用这种方法按主题分组:

table(
  cut(df$RT2, c(0, y_axis), right = FALSE),
  cut(df$RT1, c(0, x_axis), right = FALSE)
)

我真的很感激任何帮助,

谢谢你,

卢卡斯

r dataframe dplyr grid
1个回答
0
投票

你的问题不够清楚,因为你选择的例子有很多巧合,可能会导致误解。

  • 2 列,不包括主题 (
    RT1
    ,
    RT1
    )。 2 个用于比较的向量 (
    x_axis
    ,
    y_axis
    )。
    df
    中有 2 个科目。他们之间有信件往来吗?
  • df2
    中,每一行代表某个范围内个体的数量(频率),但这没有太大意义,因为 1 个数字只会被分类到 1 个范围中,因此
    df2
    中的零代表以下内容我认为这是显而易见的。
  • 为什么您没有考虑df2中的范围
    x3-x4
    ,我可能认为这是一个错误,但在您的示例中,这是具有更多个体的范围之一。

因此,假设存在对应关系:

RT1
-
x_axis
RT2
-
y_axis
,我可以建议下一个解决方案。我可以改进它,但需要你给我们一个更好的例子或解释。

mapply(x = df[,2:3], breaks = list(x_axis = x_axis, y_axis = y_axis), 
       FUN = \(x, breaks) cut(x = x, breaks = c(-Inf, breaks, Inf)), 
       SIMPLIFY = FALSE) |> 
  
  lapply(\(x) table(df$Subject, x))

在输出中,每列都是一个范围(考虑到假设的对应关系),每行都是一个主题。

© www.soinside.com 2019 - 2024. All rights reserved.