首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >根据唯一的行集创建新的级别列

根据唯一的行集创建新的级别列
EN

Stack Overflow用户
提问于 2018-01-31 16:44:08
回答 2查看 91关注 0票数 1

我想用新的变量(最好是字母)创建一个新列,以便以后统计每一组的频率。

假设我有一个名为datatemp的数据框架,它类似于:

Data.frame(c(“红色”,“蓝色”),6),val = 1:6)颜色val 1红1 2蓝2 3红3 4蓝4 5红5 6红6 7红2 8蓝2 9红3 10蓝4 11红5 12蓝6

我可以看到唯一的行集,其中colorsval列在一起具有相同的输入,例如:

唯一(“颜色”,“val”)颜色val 1红1 2蓝2 3红3 4蓝4 5红5 6蓝6

我真正想要做的是在相同的数据帧中创建一个新列,其中上面的每个唯一的行集都有一个级别,例如:

colors val freq 1 red 1 A 2 blue 2 B 3 red 3 C 4 blue 4 D 5 red 5 E 6 blue 6 F 7 red 1 A 8 blue 2 B 9 red 3 C 10 blue 4 D 11 red 5 E 12 blue 6 F

我知道这是非常基本的,但是,我不能为一个巨大的数据集提出一个有用的想法。

因此,让问题更加明确,我在下面给出另一个期望产出的表述:

colA colB newcol 10 11 A 12 15 B 10 11 A 13 15 C

新列中的值应基于其前面两列的唯一性。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-01-31 17:06:14

www的解决方案将value列中的唯一值映射为freq列中的字母。如果您想要为colorsval的每个唯一组合创建一个因子变量,您可以按照以下思路进行如下操作:

代码语言:javascript
运行
复制
library(plyr)
datatemp = data.frame(colors=rep( c("red","blue"), 6), val = 1:6)
datatemp$freq <- factor(paste(datatemp$colors, datatemp$val), levels=unique(paste(datatemp$colors, datatemp$val)))
datatemp$freq <- mapvalues(datatemp$freq, from = levels(datatemp$freq), to = LETTERS[1:length(levels(datatemp$freq))])

我首先为valcolors的每个唯一组合创建一个新的因子变量,然后使用plyr::mapvalue将因子级别重命名为字母。

票数 2
EN

Stack Overflow用户

发布于 2018-01-31 16:49:10

我们可以将valcolor列连接起来,并将其作为因子创建,然后可以通过字母更改因子级别。

代码语言:javascript
运行
复制
datatemp$Freq <- as.factor(paste(datatemp$val, datatemp$colors, sep = "_"))
levels(datatemp$Freq) <- LETTERS[1:length(levels(datatemp$Freq))]
datatemp
#    colors val Freq
# 1     red   1    A
# 2    blue   2    B
# 3     red   3    C
# 4    blue   4    D
# 5     red   5    E
# 6    blue   6    F
# 7     red   1    A
# 8    blue   2    B
# 9     red   3    C
# 10   blue   4    D
# 11    red   5    E
# 12   blue   6    F
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48547212

复制
相关文章

相似问题

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