如何在R中的数据框中添加列

sfa*_*tor 6 r

我已经将文件中的数据导入到R中的数据框中.就像这样.

Name      Count   Category
A         100     Cat1
C         10      Cat2
D         40      Cat1 
E         30      Cat3
H         3       Cat3
Z         20      Cat2
M         50      Cat10
Run Code Online (Sandbox Code Playgroud)

所以现在我想添加Category列,具体取决于Name列中的值.如果Name =(A,D),Category ='Cat1'等等.

这只是我给出的一个简单例子.我有大量的名称和类别,所以我想要一个紧凑的语法.我怎样才能做到这一点?

编辑:我已经更改了示例以更好地满足我的需求,因为名称可以是任何数字.很抱歉以前不太清楚.

Pra*_*ani 2

您可以使用地图。(已更新以使用stringsAsFactors = FALSE

df <- data.frame( Name = c('A', 'C', 'D', 'E', 'H', 'Z', 'M'), 
                  Count = c(100,10,40,30,3,20,50), stringsAsFactors = FALSE)
Categories <- list(Cat1 = c('A','D'), 
                   Cat2 = c('C','Z'), 
                   Cat3 = c('E','H'), 
                   Cat10 = 'M')
nams <- names( Categories )
nums <- sapply(Categories, length)
CatMap <- unlist( Map( rep, nams, nums ) )
names(CatMap) <- unlist( Categories )

df <- transform( df, Category = CatMap[ Name ])
Run Code Online (Sandbox Code Playgroud)

  • @sfactor:明白了!如果在构建数据框时在第一行使用“stringsAsFactors = FALSE”,则可以修复它。我修复了我的解决方案来做到这一点。顺便说一句,R 将字符串值数据帧列视为因子的默认行为经常让我感到困扰。我必须在代码中的许多地方不断地说“stringsAsFactors = FALSE”。有时我只是将其全局设置为 FALSE,如“options(stringsAsFactors = FALSE)”,因为我很少需要将字符串解释为工作中的因素,但您的使用可能会有所不同。 (2认同)