全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 R语言论坛
5598 11
2017-07-29
悬赏 20 个论坛币 已解决
很多行很多列的数据

其中某两行除了一个属性不同,其他属性全部相同,请问该如何合并这两行呢

话不多说,具体见如下图

原始数据1.png

目的数据1.png

麻烦给出详细代码

PS,我要应用于R shiny中。其他都已写好,只需加代码进去了。你给的代码是否可以直接用?

最佳答案

jimaocai 查看完整内容

我写了一个代码,希望能帮到楼主。但是我不知道楼主的shiny app整体代码是怎样的,所以需要楼主看着怎么应用进去。在下列代码中只要把dat代替为shiny输入的一个数据data.frame就行,比如dat=input$dat, 或者dat=dat()之类的。 > ##define data frame > dat dat ID SITE Volume 1 1 beijing 1 2 1 shanghai 1 3 4 beijing 4 4 5 beijing 5 > > ##create new site names > sub.dat ...
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2017-7-29 17:32:21
我写了一个代码,希望能帮到楼主。但是我不知道楼主的shiny app整体代码是怎样的,所以需要楼主看着怎么应用进去。在下列代码中只要把dat代替为shiny输入的一个数据data.frame就行,比如dat=input$dat, 或者dat=dat()之类的。

> ##define data frame
> dat <- data.frame(ID=c(1,1,4,5),SITE=c('beijing','shanghai','beijing','beijing'),Volume=c(1,1,4,5))
> dat
  ID     SITE Volume
1  1  beijing      1
2  1 shanghai      1
3  4  beijing      4
4  5  beijing      5
>
> ##create new site names
> sub.dat <- dat[,c('ID','SITE')]
> site <- by(data=sub.dat,INDICES = sub.dat$ID,FUN = function(x){
+   paste0(x$SITE,collapse = ',')
+ })
>
> site.idx <- which(colnames(dat)=='SITE')
>
> ##remove duplicated and put in the new site names
> dat.new <- dat[!duplicated(dat[,-site.idx]),]
> dat.new$SITE <- as.vector(site)
> dat.new
  ID             SITE Volume
1  1 beijing,shanghai      1
3  4          beijing      4
4  5          beijing      5
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2017-7-29 20:46:55
jimaocai 发表于 2017-7-29 17:32
我写了一个代码,希望能帮到楼主。但是我不知道楼主的shiny app整体代码是怎样的,所以需要楼主看着怎么应用 ...
普通的是已经没问题啦,周一去用公司电脑用shiny搞一下没问题的话就发币了,有问题了再问问你。放心啦,绝不会辜负你的劳动成果
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2017-7-29 20:58:04
jimaocai 发表于 2017-7-29 17:32
我写了一个代码,希望能帮到楼主。但是我不知道楼主的shiny app整体代码是怎样的,所以需要楼主看着怎么应用 ...
请问第一个出现的idx是什么呢?我这边变异错误,说找不到这个object   谢谢!
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2017-7-29 21:50:22
奢香夫人1 发表于 2017-7-29 20:58
请问第一个出现的idx是什么呢?我这边变异错误,说找不到这个object   谢谢!
不好意思,写错了,这个是正确的代码,测试过能用了,把idx换成sub.dat。我主要是用了一个by()函数来从新整合beijing,shanghai的名字,楼主可以查看?by帮助文件来了解函数具体的应用方法

##define data frame
dat <- data.frame(ID=c(1,1,4,5),SITE=c('beijing','shanghai','beijing','beijing'),Volume=c(1,1,4,5))
dat


##create new site names
sub.dat <- dat[,c('ID','SITE')]
site <- by(data=sub.dat,INDICES = sub.dat$ID,FUN = function(x){
   paste0(x$SITE,collapse = ',')
})

site.idx <- which(colnames(dat)=='SITE')

##remove duplicated and put in the new site names
dat.new <- dat[!duplicated(dat[,-site.idx]),]
dat.new$SITE <- as.vector(site)
dat.new
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2017-7-29 22:41:25
jimaocai 发表于 2017-7-29 21:50
不好意思,写错了,这个是正确的代码,测试过能用了,把idx换成sub.dat。我主要是用了一个by()函数来从 ...
谢谢谢谢!我刚用了很多数据做测试,可是我又发现了一个问题哎

对于你的测试数据来说,当重复ID是最小的数的时候可以得到正确的输出。当重复ID的数字比较大不是最小的时候会出问题哎

不知道我有没有表达清楚

就是将你的数据ID=c(8,8,4,5)就会出问题哎,不知道是什么原因呢

蟹蟹啦!

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

点击查看更多内容…
相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群