Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 用于汇总数据帧的自动更新条件_R_Loops_Dataframe_Criteria_Summarization - Fatal编程技术网

R 用于汇总数据帧的自动更新条件

R 用于汇总数据帧的自动更新条件,r,loops,dataframe,criteria,summarization,R,Loops,Dataframe,Criteria,Summarization,我有一个向量,其中包含一系列标准,我想使用这些标准在我的数据框架中循环,总结我的相关数据列 我使用dplyr和pipe复制下面的代码。它工作得很好,所以我会在下面解释我的挣扎 我的代码: c1 <- c(0.5,0.5,0.5,1,1,1,2,2,2,2.5,2.5,2,3,3,4,4,4.4,4.5,4.5,5,5.5,6,7,7,8,8.5,9,9.5) c2 <- c(12,10,40,4,12,7,3,2,1,4,8,10,10,7,7,4,4,4,5,5,6,15,15,2

我有一个向量,其中包含一系列标准,我想使用这些标准在我的数据框架中循环,总结我的相关数据列

我使用dplyr和pipe复制下面的代码。它工作得很好,所以我会在下面解释我的挣扎

我的代码:

c1 <- c(0.5,0.5,0.5,1,1,1,2,2,2,2.5,2.5,2,3,3,4,4,4.4,4.5,4.5,5,5.5,6,7,7,8,8.5,9,9.5)
c2 <- c(12,10,40,4,12,7,3,2,1,4,8,10,10,7,7,4,4,4,5,5,6,15,15,25,4,4,7,18)
c3 <- rep(c("AA","BB","CC","DD"), 7)

df <- data.frame(criteria.names = c3, criteria.data = c1, relevant.data = c2,
 stringsAsFactors = FALSE)

user.criteria <- c(0,2,3,5,7,10)


summarised.data <- df %>%
  group_by(criteria.names) %>%
    summarise(class1 = sum(relevant.data[criteria.data >= 0 & criteria.data < 2]),
              class2 = sum(relevant.data[criteria.data >= 2 & criteria.data < 3]),
              class3 = sum(relevant.data[criteria.data >= 3 & criteria.data < 5]),
              class4 = sum(relevant.data[criteria.data >= 5 & criteria.data < 7]),
              class5 = sum(relevant.data[criteria.data >= 7 & criteria.data < 10]))
c1=5&criteria.data<7]),
类别5=总和(相关数据[criteria.data>=7和criteria.data<10]))
以下是我的预期输出:

 summarised.data
# A tibble: 4 x 6
  criteria.names class1 class2 class3 class4 class5
  <chr>           <dbl>  <dbl>  <dbl>  <dbl>  <dbl>
1 AA                 24      1     14      6      4
2 BB                 17      4     11     15      4
3 CC                 40     11     12      0     22
4 DD                  4     12      4      5     43
summated.data
#一个tibble:4x6
criteria.names类别1类别2类别3类别4类别5
1机管局24 1 14 6 4
2 BB 17 4 11 15 4
3 CC 40 11 12 0 22
4 DD 4 12 4 5 43
我的问题是:我在总结中使用的“user.criteria”向量的值是通过用户输入来的,所以不能保证它们实际上会为我提供我在计算中明确输入的2,3,5,7,10值(默认情况下总是0)。我尝试过使用apply系列函数(apply、sappy、lappy、mappy)和adply(plyr包),但到目前为止,我还没有成功地解决这个问题。我试图避免在R中使用显式循环,因为我使用的实际数据库非常庞大

下面是我的错误代码示例:

summarised.try <- 1:(length(user.criteria)-1) %>%
  adply(1,function(x){
   df %>%
      group_by(criteria.names) %>%
      summarise(class = sum(relevant.data[criteria.data >=user.criteria[x]
  & criteria.data < user.criteria[x+1]]))})
summated.try%
adply(1,函数(x){
df%>%
分组依据(标准名称)%>%
总结(class=sum)(相关的.data[criteria.data>=user.criteria[x]
&criteria.data

我想要的是找到一种优雅的方法来获取用户提供给我的值,并使用它们自动计算我的摘要,而无需手动编辑我的代码。Tks

此函数可能是最不优雅的解决方案,但是如果我们保持相同的
df
列名(即
标准.名称
标准.数据
相关.数据
):

输出:

   criteria.names class1 class2 class3 class4 class5
1             AA     24      1     14      6      4
2             BB     17      4     11     15      4
3             CC     40     11     12      0     22
4             DD      4     12      4      5     43
classifier(criteria = user.criteria, df = df)
   criteria.names class1 class2 class3 class4 class5
1             AA     24      1     14      6      4
2             BB     17      4     11     15      4
3             CC     40     11     12      0     22
4             DD      4     12      4      5     43