小编lin*_*inp的帖子

将列折叠/连接/聚合到每个组中的单个逗号分隔字符串

我想根据两个分组变量聚合数据框中的一列,并用逗号分隔各个值.

这是一些数据:

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)

aggregate r r-faq

53
推荐指数
3
解决办法
2万
查看次数

plyr包在多列上编写相同的函数

我想使用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)

有没有更好的方法来写这个?谢谢您的帮助!!

r plyr

6
推荐指数
1
解决办法
4454
查看次数

使用ggplot突出周末?

我没有找到任何有关此问题的历史问题......我想突出显示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)

所以结果可能像下面的东西......

在此输入图像描述

r ggplot2

4
推荐指数
2
解决办法
2293
查看次数

如何将多个逻辑列汇总到一个额外的列中?

我一直在寻找,但找不到类似的问题......

我有类似这样的东西:

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)

任何建议都非常感谢!!

r

2
推荐指数
1
解决办法
81
查看次数

标签 统计

r ×4

aggregate ×1

ggplot2 ×1

plyr ×1

r-faq ×1