如何在 R SQLDF 中聚合字符串?
How to aggregate strings in R SQLDF?
我有这样的数据集:
DEPTNO ENAME
10 CLARK
10 KING
10 MILLER
20 ADAMS
20 FORD
20 JONES
我正在尝试创建这样的结果:
DEPTNO AGGREGATED_ENAMES
10 CLARK,KING,MILLER
20 ADAMS,FORD,JONES
在 Oracle 中,这可以通过以下方式完成:
SQL> SELECT deptno
,LISTAGG(ename, ',') WITHIN GROUP (ORDER BY ename) AS employees
FROM emp
GROUP BY
deptno;
我如何在 R 中的 SQLDF
中执行此操作?
或者如果在 R 中无法实现 SQLDF
,我该如何在 R 中实现?
谢谢!
帕斯
首先,将数据加载到 data.frame
并将 stringsAsFactors
设置为 FALSE
。
> v1=c(10, 10,20)
> v2=c('CLARK','KING','ADAMS')
> df = data.frame(v1,v2, stringsAsFactors = FALSE)
df
v1 v2
1 10 CLARK
2 10 KING
3 20 ADAMS
> str(df)
'data.frame': 3 obs. of 2 variables:
$ v1: num 10 10 20
$ v2: chr "CLARK" "KING" "ADAMS"
接下来,在两列之间使用aggregate
函数:
> aggregate(v2 ~ v1, df, c)
v1 v2
1 10 CLARK, KING
2 20 ADAMS
像这样使用group_concat
:
sqldf("select DEPTNO, group_concat(ENAME) ENAMES from emp group by DEPTNO")
给予:
DEPTNO ENAMES
1 10 CLARK,KING,MILLER
2 20 ADAMS,FORD,JONES
我有这样的数据集:
DEPTNO ENAME
10 CLARK
10 KING
10 MILLER
20 ADAMS
20 FORD
20 JONES
我正在尝试创建这样的结果:
DEPTNO AGGREGATED_ENAMES
10 CLARK,KING,MILLER
20 ADAMS,FORD,JONES
在 Oracle 中,这可以通过以下方式完成:
SQL> SELECT deptno
,LISTAGG(ename, ',') WITHIN GROUP (ORDER BY ename) AS employees
FROM emp
GROUP BY
deptno;
我如何在 R 中的 SQLDF
中执行此操作?
或者如果在 R 中无法实现 SQLDF
,我该如何在 R 中实现?
谢谢! 帕斯
首先,将数据加载到 data.frame
并将 stringsAsFactors
设置为 FALSE
。
> v1=c(10, 10,20)
> v2=c('CLARK','KING','ADAMS')
> df = data.frame(v1,v2, stringsAsFactors = FALSE)
df
v1 v2
1 10 CLARK
2 10 KING
3 20 ADAMS
> str(df)
'data.frame': 3 obs. of 2 variables:
$ v1: num 10 10 20
$ v2: chr "CLARK" "KING" "ADAMS"
接下来,在两列之间使用aggregate
函数:
> aggregate(v2 ~ v1, df, c)
v1 v2
1 10 CLARK, KING
2 20 ADAMS
像这样使用group_concat
:
sqldf("select DEPTNO, group_concat(ENAME) ENAMES from emp group by DEPTNO")
给予:
DEPTNO ENAMES
1 10 CLARK,KING,MILLER
2 20 ADAMS,FORD,JONES