首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在R中使用data.table有条件地组合列

在R中使用data.table有条件地组合列
EN

Stack Overflow用户
提问于 2014-03-15 07:49:18
回答 2查看 428关注 0票数 1

我有一组植物的数据集。这些植物中有两种有多个株系。在分析数据时,我希望有一个列,其中有两个有多条线的工厂,但是所有其他的都是这样。这是我的可复制的数据集:

代码语言:javascript
复制
testset <- data.table(date=as.Date(c("2013-07-02","2013-08-03","2013-09-04","2013-10-05","2013-11-06")), yr = c(2013,2013,2013,2013,2013), mo = c(07,08,09,10,11), da = c(02,03,04,05,06), plant = LETTERS[1:5], PlantID = c(1,2,3,4,5,1,2,3,6,7), product = as.factor(letters[26:22]), rating = runif(25))

这是我要查找的附加列输出:

A1

B2

C3

D4

E5

A1

B2

C3

D6

E7

这是一个简单的例子,但我真正的数据集要大得多,所以我希望有一种优雅的data.table方法来生成它。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-03-15 11:17:59

当您使用data.table时,您不需要这样做。相反,您应该设置一个key或使用一个临时by (如我在下面的示例中所显示的),这是data.table操作的关键基础之一。

使用by的玩具示例

看下面的玩具例子。我们用idgrp变量对评分进行求和。因此,在存在重复项的情况下,它们会被求和,但是分组变量的唯一组合将由自己来处理(因此请注意最后一行的ratingsum_rating值,后者具有分组变量的唯一组合(其他行有两行,与您的示例中相似):

代码语言:javascript
复制
# Make this data reproducible
set.seed(1)
dt <- data.table( id = c( rep( 1:2 , 2 ) , 1 ) , grp = c( rep( 1:2 , 2 ) , 3 ) , rating = sample( 5 , 5 , TRUE ) ) 
#   id grp rating
#1:  1   1      4
#2:  2   2      1
#3:  1   1      3
#4:  2   2      4
#5:  1   3      4

# Sum by 'id' and 'grp'...
dt[ , sum_rating := sum( rating ) , by = list( id , grp ) ]
dt
#   id grp rating sum_rating
#1:  1   1      4          7
#2:  2   2      1          5
#3:  1   1      3          7
#4:  2   2      4          5
#5:  1   3      4          4  <=====  rating and sum_rating are the same because this is a unique row
票数 1
EN

Stack Overflow用户

发布于 2014-03-15 08:31:02

我不明白你想要的输出是什么,但希望这能帮助你在路上。下面是一个data.table解决方案,用于查找所有独特的植物线:

代码语言:javascript
复制
> testset[,unique(paste0(plant, PlantID))]
[1] "A1" "B2" "C3" "D4" "D6" "E5" "E7"
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22421116

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档