首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何添加一个列来计算前几列中唯一字符的外观数?

如何添加一个列来计算前几列中唯一字符的外观数?
EN

Stack Overflow用户
提问于 2016-11-19 06:38:15
回答 2查看 64关注 0票数 0

我有这么一个数据

代码语言:javascript
复制
mydf <- data.frame(Y1 = c('3','3','6','6'),Y2 = c('3','3','3','3'), 
Y3 = c('3','3','3','6'),Y4 = c('3','3','6','6'),Y5 = c('7','6','6','6'),
Y6 = c('7','8','8','8'),Y7 = c('7','6','3','8'),Y8 = c('7','8','8','7'),
Y9 = c('10','10','8','7'),Y10 = c('10','10','8','7')) 

这就是

代码语言:javascript
复制
   Y1 Y2 Y3 Y4 Y5 Y6 Y7 Y8 Y9 Y10
1  3  3  3  3  7  7  7  7  10 10
2  3  3  3  3  6  8  6  8  10 10
3  6  3  3  6  6  8  3  8  8  8
4  6  3  6  6  6  8  8  7  7  7

这是足球员在场上的坐标(不包括守门员)。我想再增加一列“队形”,它从以前的列中计算出坐标数的出现数,以便产生足球队形。

例如,对于第一行,有四个3s,四个7s和两个10s,这将产生4-4-2的形成。

此外,一些坐标数字可能不会出现在一起。对于第3行,“6”出现在Y1、Y4和Y5中。

基本上,形成的一般模式应该是a (- the ),其中a、b、c、d、e分别表示第一、第二、第三(如适用的话)唯一数的出现次数。

例如,对于这个数据集,结果应该是:

代码语言:javascript
复制
       Y1 Y2 Y3 Y4 Y5 Y6 Y7 Y8 Y9 Y10 Formation
    1  3  3  3  3  7  7  7  7  10 10  4-4-2
    2  3  3  3  3  6  8  6  8  10 10  4-2-2-2
    3  6  3  3  6  6  8  3  8  8  8   3-3-4
    4  6  3  6  6  6  8  8  7  7  7   4-1-2-3
EN

回答 2

Stack Overflow用户

发布于 2016-11-19 08:24:03

我们可以循环通过行,得到频率计数与tablepaste频率在一起,以创建‘形成’列。

代码语言:javascript
复制
df1$Formation <- apply(df1, 1, FUN = function(x) 
         paste(table(factor(x, levels=unique(x))), collapse="-"))
df1$Formation
#[1] "4-4-2"   "4-2-2-2" "3-3-4"   "4-1-2-3"
票数 2
EN

Stack Overflow用户

发布于 2016-11-19 08:40:18

有了data.table你就可以

代码语言:javascript
复制
library(data.table)
wide <- setDT(mydf, keep.rownames = TRUE)  
long <-  melt(wide, id.vars = "id")
formation <- long[, .N, by = .(id, value)][, .(Formation = paste(N, collapse = "-")), by = id]
wide[formation, on = "id"][, id := NULL][]

#   Y1 Y2 Y3 Y4 Y5 Y6 Y7 Y8 Y9 Y10 Formation
#1:  3  3  3  3  7  7  7  7 10  10     4-4-2
#2:  3  3  3  3  6  8  6  8 10  10   4-2-2-2
#3:  6  3  3  6  6  8  3  8  8   8     3-3-4
#4:  6  3  6  6  6  8  8  7  7   7   4-1-2-3

解释

  • 在添加行ids时,data.frame被强制为data.table。
  • 在整形成长形后,出现的次数按行id和坐标分组计数。Formation是通过折叠每一行id的字符串中的计数来创建的。
  • 最后,将结果与我们开始使用的data.table连接起来。行id列将被移除,因为它不再需要。
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40689961

复制
相关文章

相似问题

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