我想用新的变量(最好是字母)创建一个新列,以便以后统计每一组的频率。
假设我有一个名为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
我可以看到唯一的行集,其中colors
和val
列在一起具有相同的输入,例如:
唯一(“颜色”,“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
新列中的值应基于其前面两列的唯一性。
发布于 2018-01-31 17:06:14
www的解决方案将value
列中的唯一值映射为freq
列中的字母。如果您想要为colors
和val
的每个唯一组合创建一个因子变量,您可以按照以下思路进行如下操作:
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))])
我首先为val
和colors
的每个唯一组合创建一个新的因子变量,然后使用plyr::mapvalue将因子级别重命名为字母。
发布于 2018-01-31 16:49:10
我们可以将val
和color
列连接起来,并将其作为因子创建,然后可以通过字母更改因子级别。
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
https://stackoverflow.com/questions/48547212
复制相似问题