在R中格式化输出
我有一组显示就诊ID和受试者姓名的数据在R中格式化输出,r,format,output,R,Format,Output,我有一组显示就诊ID和受试者姓名的数据 visit<-c(1,2,3,1,2,1,1,2,3,1,2,3) subject<-c("A","A","A","B","B","C","D","D","D","E","E","E") data<-data.frame(visit=visit,subject=subject) 我得到这个输出: A B C D E 3 2 1 3 3 我想知道是否有任何方法可以更改输出,使其成为: A 3 B 2 C 1 D 3 E 3
visit<-c(1,2,3,1,2,1,1,2,3,1,2,3)
subject<-c("A","A","A","B","B","C","D","D","D","E","E","E")
data<-data.frame(visit=visit,subject=subject)
我得到这个输出:
A B C D E
3 2 1 3 3
我想知道是否有任何方法可以更改输出,使其成为:
A 3
B 2
C 1
D 3
E 3
谢谢您可以尝试聚合
aggregate(visit~subject, data, max)
# subject visit
#1 A 3
#2 B 2
#3 C 1
#4 D 3
#5 E 3
或从tapply
res <- tapply(visit,subject,max)
data.frame(subject=names(res), visit=res)
而
dplyr
解决方案是:
library(dyplr)
data %>% group_by(subject) %>% summarize(max = max(visit))
## Source: local data frame [5 x 2]
## subject max
## 1 A 3
## 2 B 2
## 3 C 1
## 4 D 3
## 5 E 3
它可能会感觉脏,但是使用基本函数
as.matrix
(或者matrix
)可以满足您的需要
> as.matrix(tapply(visit,subject,max))
[,1]
A 3
B 2
C 1
D 3
E 3
使用
堆栈
,您可以在base R中轻松地执行此操作:
stack(tapply(visit, subject, max))
# values ind
# 1 3 A
# 2 2 B
# 3 1 C
# 4 3 D
# 5 3 E
(注意:在这种情况下,“visit”和“subject”的值实际上并不是来自data.frame
。我想你应该知道!)
(第二个注意事项:您也可以使用
data.frame(如.table(tapply(visit,subject,max))
但这比使用stack
更具欺骗性,因此以后可能会导致可读性较差的代码。)
> as.matrix(tapply(visit,subject,max))
[,1]
A 3
B 2
C 1
D 3
E 3
stack(tapply(visit, subject, max))
# values ind
# 1 3 A
# 2 2 B
# 3 1 C
# 4 3 D
# 5 3 E