2017-08-29 85 views
3

我有一个名为“Control_Category”的变量的数据框。变量中有六个名字,为简单起见,我打算让通用:根据条件修改数据框中的字符串名称

df <- data.frame(Control_Category = c("Really Long Name One", 
"Super Really Long Name Two", 
"Another Really Flippin' Long Name Three", 
",Seriously, It's a Fourth Long Name", 
"Definitely a Fifth Long Name", 
"Finally, This guy is done, number six")) 

我使用这个稍作笑话。所以,虽然名称很长,但每个(1-6)的值都是一致的。在data.frame的这个特定字符向量中,有数百和数百个条目与这六个中的任何一个相匹配。

我需要做的是用短名称替换长名称。因此,在上述任何名称标识,用较短的版本替换名称,如:

一个 两个 三 四 五 六

我用“case_when”,它尝试了功能悲惨地失败了。任何帮助,将不胜感激。

根据问题从社区

项目的顺序并不重要的附加信息。没有指定1 - 6,刚好有6个,我做了6根愚蠢的长弦。琴弦本身很长。

因此,在任何地方出现“Super Really Long Name Two”的情况下,该值需要更新为类似“TWO”或“Short_Name”的那个近似于“TWO”的类型。测试和考试成绩”的简称将理想仅仅是‘审计’

+0

在你的实际数据中,4和5总是由“第四”,“第五”表示,而1,2,3和6总是表示“一”,“两”,“三“,”六“? – neilfws

+1

我想你要找的是因素:'df $ Control_Category < - factor(df $ Control_Category,levels = df $ Control_Category,labels = c(1:6))' – parksw3

+0

@parksw3我认为在真实数据中,有超过6行,并且要替换的值不是有序的。 – neilfws

回答

3

你可以只使用gsub()每进行一次更换。

df$Control_Category <- gsub('Really Long Name One', 'One', df$Control_Category) 

您可以重复类似的逻辑来处理其他五长/短名称对

+0

它不漂亮:-)但它的工作原理。 – Zach

2

他再保险公司的名称很长的更大的数据帧:

set.seed(101) 
long_names <- c("Really Long Name One", 
       "Super Really Long Name Two", 
       "Another Really Flippin' Long Name Three", 
       ",Seriously, It's a Fourth Long Name", 
       "Definitely a Fifth Long Name", 
       "Finally, This guy is done, number six") 

df <- data.frame(control_category=sample(long_names, 100, replace=TRUE)) 
head(df) 

##       control_category 
## 1 Another Really Flippin' Long Name Three 
## 2     Really Long Name One 
## 3   Definitely a Fifth Long Name 
## 4  ,Seriously, It's a Fourth Long Name 
## 5    Super Really Long Name Two 
## 6    Super Really Long Name Two 

使用unique功能会给你的类别名称:

category <- unique(df$control_category) 
print(category) 

## [1] Another Really Flippin' Long Name Three 
## [2] Really Long Name One     
## [3] Definitely a Fifth Long Name   
## [4] ,Seriously, It's a Fourth Long Name  
## [5] Super Really Long Name Two    
## [6] Finally, This guy is done, number six 
## 6 Levels: ,Seriously, It's a Fourth Long Name ... 

请注意,该水平是按照字母顺序(见levels(category))。在这种情况下,最简单的方法是通过查看当前订单来手动更改订单。在这种情况下,category[c(2, 5, 1, 4, 3, 6)]会给你正确的订单。最后,

df$control_category <- factor(
    df$control_category, 
    levels=category[c(2, 5, 1, 4, 3, 6)], 
    labels=c("one", "two", "three", "four", "five", "six") 
) 
head(df) 

## control_category 
## 1   three 
## 2    one 
## 3    five 
## 4    four 
## 5    two 
## 6    two 
+0

顺序无关紧要。我只需要在更新的问题中替换上面指定的所有名称。即,循环访问该数据列,评估名称,更新它,继续前进,重复。 – Zach