R语言 计算数据臂每个单元格中的数据数

zaq34kh6  于 2023-09-27  发布在  其他
关注(0)|答案(2)|浏览(120)

我有一个包含两列Rt 1和Rt 2的dataframe。

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)

https://i.stack.imgur.com/XQ6H8.png
所以基本上我只是想得到一些东西,返回上面网格中每个单元格中的点数,期望输出如下:

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))

然而,这是非常低效的,因为我应该为所有条件的每个单元格粘贴此代码。
我真的很感激你的帮助,
谢谢你,
卢卡斯

8e2ybdfx

8e2ybdfx1#

这里有一种方法,使用连接来分配单元格编号,然后计算并添加任何丢失的组合的0。这种方法的一个优点是,如果需要,可以通过将Subject添加到连接中(假设它已添加到查找表中),轻松地使类别随主题而变化。

library(dplyr)
df |>
  left_join(data.frame(x_axis = c(0,x_axis)), join_by(closest(RT1 > x_axis))) |>
  left_join(data.frame(y_axis = c(0,y_axis)), join_by(closest(RT2 > y_axis))) |>
  count(Subject, x_axis, y_axis) |>
  tidyr::complete(x_axis, y_axis, fill = list(n=0))

结果

# A tibble: 25 × 4
   x_axis y_axis Subject     n
    <dbl>  <dbl>   <dbl> <int>
 1      0    100       1     2
 2      0    100       2     2
 3      0    700      NA     0
 4      0   1400      NA     0
 5      0   2500      NA     0
 6    220    100       1     1
 7    220    100       2     1
 8    220    700      NA     0
 9    220   1400      NA     0
10    220   2500      NA     0
# ℹ 15 more rows
bvjxkvbb

bvjxkvbb2#

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

#                   [0,220) [220,350) [350,700) [700,1.25e+03) [1.25e+03,1.8e+03)
# [0,100)                 0         0         0              0                  0
# [100,700)               2         1         0              0                  0
# [700,1.4e+03)           0         0         3              0                  0
# [1.4e+03,2.5e+03)       0         0         0              6                  0
# [2.5e+03,3.5e+03)       0         0         0              0                  3

相关问题