我想根据两个分组变量聚合数据框中的一列,并用逗号分隔各个值.
这是一些数据:
data <- data.frame(A = c(rep(111, 3), rep(222, 3)), B = rep(1:2, 3), C = c(5:10))
data
# A B C
# 1 111 1 5
# 2 111 2 6
# 3 111 1 7
# 4 222 2 8
# 5 222 1 9
# 6 222 2 10
Run Code Online (Sandbox Code Playgroud)
"A"和"B"是分组变量,"C"是我想要折叠成逗号分隔character字符串的变量.我试过了:
library(plyr)
ddply(data, .(A,B), summarise, test = list(C))
A B test
1 111 1 5, 7
2 111 2 6
3 222 1 9
4 222 …Run Code Online (Sandbox Code Playgroud) 如何在列中按组聚合数据group并在列中折叠文本text?
样本数据:
df <- read.table(header=T, text="
group text
a a1
a a2
a a3
b b1
b b2
c c1
c c2
c c3
")
Run Code Online (Sandbox Code Playgroud)
所需输出(数据框):
group text
a a1a2a3
b b1b2
c c1c2c3
Run Code Online (Sandbox Code Playgroud)
我现在有:
sapply(unique(df$group), function(x) {
paste0(df[df$group==x,"text"], collapse='')
})
Run Code Online (Sandbox Code Playgroud)
这在某种程度上起作用,因为它返回按组正确折叠的文本,但作为向量:
[1] "a1a2a3" "b1b2" "c1c2c3"
Run Code Online (Sandbox Code Playgroud)
我需要一个带有group列的数据框.
假设我有这个员工名单:
Dept Date Name
----- --------- ---------------
30 07-DEC-02 Raphaely
30 18-MAY-03 Khoo
40 07-JUN-02 Mavris
50 01-MAY-03 Kaufling
50 14-JUL-03 Ladwig
70 07-JUN-02 Baer
90 13-JAN-01 De Haan
90 17-JUN-03 King
100 16-AUG-02 Faviet
100 17-AUG-02 Greenberg
110 07-JUN-02 Gietz
110 07-JUN-02 Higgins
Run Code Online (Sandbox Code Playgroud)
我想要一个R部门的列表聚合(类似于Oracle PL/SQL的LISTAGG函数),它将产生最后一列:
Dept Date Name Emp_list
----- --------- --------------- ---------------------------------------------
30 07-DEC-02 Raphaely Raphaely; Khoo
30 18-MAY-03 Khoo Raphaely; Khoo
40 07-JUN-02 Mavris Mavris
50 01-MAY-03 Kaufling Kaufling; Ladwig
50 14-JUL-03 Ladwig …Run Code Online (Sandbox Code Playgroud) 我想“总结” R中的一个因子变量,这样对于每条记录,我都知道存在哪些因子水平。
这是一个简化的示例数据框:
df <- data.frame(record= c("a","a","b","c","c","c"),
species = c("COD", "SCE", "COD", "COD","SCE","QSC"))
record species
a COD
a SCE
b COD
c COD
c SCE
c QSC
Run Code Online (Sandbox Code Playgroud)
这就是我想要实现的目标:
data.frame(record= c(a,b,c), species = c("COD, SCE", "COD", "COD, SCE, QSC"))
record species
a COD, SCE
b COD
c COD, SCE, QSC
Run Code Online (Sandbox Code Playgroud)
这是我所能获得的最接近的结果,但它会将所有级别的因素记录在每个记录中,而不仅仅是每个记录应显示的水平。
summarise(group_by(df, record),
species = (paste(levels(species), collapse="")))
record species
<fctr> <chr>
a CODQSCSCE <- this should be CODSCE
b CODQSCSCE <- this should just be COD
c CODQSCSCE <- this is …Run Code Online (Sandbox Code Playgroud) 我对R比较陌生,不知道如何用短语来表达我的问题.基本上,我有一个test看起来像这样的数据框:
PMID PL subject
1 Canada neurology
2 USA cancer
5 Canada dermatology
2 USA respiratory
4 Japan neurology
2 USA cancer
5 Canada cardiovascular
Run Code Online (Sandbox Code Playgroud)
我要转换成
PMID PL subject
1 Canada neurology
2 USA cancer, respiratory
5 Canada dermatology, cardiovascular
4 Japan neurology
Run Code Online (Sandbox Code Playgroud)
实质上,每个PMID可以与多个主题相关联,因此我希望保留该信息.我只想要唯一的PMID行.我也想删除重复次数(例如,有3行"2"但其中2行是"癌症".另外,我还有其他变量,每个PMID对于其他每个都有相同的值变量(主题除外).
请指教.
谢谢!