dplyr按首选字符串值汇总

dplyr按首选字符串值汇总,r,string,dplyr,summarize,R,String,Dplyr,Summarize,我有一个带有ID和字符串值的数据帧,其中一些我更喜欢: library(dplyr) d1<-data.frame(id=c("a", "a", "b", "b"), value=c("good", "better", "good", "good")) 你可以尝试一种因子方法。 首先,需要字符串的有序向量

我有一个带有ID和字符串值的数据帧,其中一些我更喜欢:

library(dplyr)

d1<-data.frame(id=c("a", "a", "b", "b"), 
           value=c("good", "better", "good", "good"))

你可以尝试一种因子方法。 首先,需要字符串的有序向量,如:

my_levels <- c("better", "good")
myu级别%
变异(数值=因子(数值,级别=我的级别)%>%as.numeric)%>%
分组依据(id)%>%
汇总(res=min(value\u num))%>%
突变(res_fac=因子(res,labels=我的水平))
#一个tibble:2x3
id res_fac
更好
2 b 2好

您可以尝试一种因子方法。 首先,需要字符串的有序向量,如:

my_levels <- c("better", "good")
myu级别%
变异(数值=因子(数值,级别=我的级别)%>%as.numeric)%>%
分组依据(id)%>%
汇总(res=min(value\u num))%>%
突变(res_fac=因子(res,labels=我的水平))
#一个tibble:2x3
id res_fac
更好
2 b 2好

类似于@roman的答案,但使用该软件包,您可以执行以下操作来过滤“更好”的行:

require(data.table)
setDT(d1)
#将值转换为因子
d1[,值:=系数(值,等级=c(‘更好’、‘良好’)]
#返回每个id组的第一个有序值
d1[,.SD[订单(值)][1],id]

类似于@roman的答案,但使用该软件包,您可以执行以下操作来过滤“更好”的行:

require(data.table)
setDT(d1)
#将值转换为因子
d1[,值:=系数(值,等级=c(‘更好’、‘良好’)]
#返回每个id组的第一个有序值
d1[,.SD[订单(值)][1],id]
您可能会觉得这很有帮助您可能会觉得这很有帮助
id | value
----------
"a"| "better"
"b"| "good"
my_levels <- c("better", "good")
d1 %>% 
  mutate(value_num = factor(value, levels = my_levels) %>% as.numeric) %>% 
  group_by(id) %>%
  summarize(res = min(value_num)) %>% 
  mutate(res_fac = factor(res, labels = my_levels))
# A tibble: 2 x 3
id      res res_fac
<chr> <dbl> <fct>  
1 a         1 better 
2 b         2 good