我想根据两个分组变量聚合数据框中的一列,并用逗号分隔各个值.
这是一些数据:
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) 我想使用ddply函数将相同的函数写入多个列,但我尝试继续将它们写在一行中,希望看到有更好的方法吗?
这是一个简单的数据版本:
data<-data.frame(TYPE=as.integer(runif(20,1,3)),A_MEAN_WEIGHT=runif(20,1,100),B_MEAN_WEIGHT=runif(20,1,10))
Run Code Online (Sandbox Code Playgroud)
我想通过这样做找出A_MEAN_WEIGHT和B_MEAN_WEIGHT列的总和:
ddply(data,.(TYPE),summarise,MEAN_A=sum(A_MEAN_WEIGHT),MEAN_B=sum(B_MEAN_WEIGHT))
Run Code Online (Sandbox Code Playgroud)
但在我目前的数据中,我有超过8个"*_MEAN_WEIGHT",而我已经厌倦了将它们写成8次
ddply(data,.(TYPE),summarise,MEAN_A=sum(A_MEAN_WEIGHT),MEAN_B=sum(B_MEAN_WEIGHT),MEAN_C=sum(C_MEAN_WEIGHT),MEAN_D=sum(D_MEAN_WEIGHT),MEAN_E=sum(E_MEAN_WEIGHT),MEAN_F=sum(F_MEAN_WEIGHT),MEAN_G=sum(G_MEAN_WEIGHT),MEAN_H=sum(H_MEAN_WEIGHT))
Run Code Online (Sandbox Code Playgroud)
有没有更好的方法来写这个?谢谢您的帮助!!
我没有找到任何有关此问题的历史问题......我想突出显示ggplot图表的周末表现,以便用户可以直接告诉图表哪一部分(可能是灰色阴影?)是周末表现.
这是测试数据的简单版本:
test <- data.frame(DATE=seq(from = as.POSIXct("2014-07-16 01:00"), to = as.POSIXct("2014-07-30 00:00"), by = "hour"),count=floor(runif(336,1,100)))
Run Code Online (Sandbox Code Playgroud)
我的图表的简单版本是:
ggplot() + geom_line(aes(x=DATE,y=count),data=test) + labs(title="test")
Run Code Online (Sandbox Code Playgroud)
所以结果可能像下面的东西......

我一直在寻找,但找不到类似的问题......
我有类似这样的东西:
data<-data.frame(RESULT1=c(TRUE,TRUE,FALSE,FALSE),RESULT2=c(FALSE,TRUE,TRUE,FALSE),RESULT3=c(FALSE,FALSE,TRUE,TRUE))
Run Code Online (Sandbox Code Playgroud)
我希望有一个基于多个逻辑列的摘要列,结果证明是:
RESULT1 RESULT2 RESULT3 COMMENTS
1 TRUE FALSE FALSE RESULT1
2 TRUE TRUE FALSE RESULT1,RESULT2
3 FALSE TRUE TRUE RESULT2,RESULT3
4 FALSE FALSE TRUE RESULT3
Run Code Online (Sandbox Code Playgroud)
我写了一个非常笨拙的功能,一段时间后确实有效,但必须有更好的方法来写这个......
data$COMMENTS<-""
for(res in c("RESULT1","RESULT2","RESULT3")){
data$COMMENTS[eval(parse(text=paste("data$",res,sep="")))==TRUE] <- sapply(data$COMMENTS[eval(parse(text=paste("data$",res,sep="")))==TRUE],function(x){if(x==""){return(paste(x,res,sep=""))}else{return(paste(x,res,sep=","))}})}
Run Code Online (Sandbox Code Playgroud)
任何建议都非常感谢!!