R 用于汇总数据帧的自动更新条件
我有一个向量,其中包含一系列标准,我想使用这些标准在我的数据框架中循环,总结我的相关数据列 我使用dplyr和pipe复制下面的代码。它工作得很好,所以我会在下面解释我的挣扎 我的代码: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
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