如何在R的数据框中缩写长名?

时间:2017-11-30 07:31:07

标签: r dataframe abbreviation

我正在处理一个名称长度超过25个字符的数据帧。我试图用所有这些组织名称制作一个条形图(带有阴谋),但名称因为它们超长而被切断。我已经尝试过如下边缘:

plot_ly(x = number, y = org_name, type = 'bar') %>% 
layout(margin = list(l = 150))

它有效,但条形图看起来并不好看,所以我尝试做的另一种选择是缩写任何超过25个字符的组织名称。但是,我很难这样做。我尝试缩写它的一种方法是创建一个名为abbrv的新列,使用substring获取组织名称的前25个字符,然后执行" ...",然后将其放入列中。虽然组织的名称不超过25,但我会在abbrv列中添加NA,如下所示:

for(i in dataframe.name$org_name){
 if(nchar(i) > 25){
 dataframe.name$abbrv <- paste0(substring(i, 0, 25), "...")
 }
 else{
  dataframe.name$abbrv <- "NA"
}

现在我唯一拥有abbrv列(如果有效),如果组织名称大于25个字符,如果它没有&#39;那么我将如何确保在图表中显示abbrv列?然后它显示正常的组织名称。

无论如何,我对此进行了充分的讨论,但这是我尝试过的一种方法,但是由于abbrv专栏提出了&#34; NA&#34;对于列中的所有行,无论组织的名称有多长。我试图做的另一种方法是使用替换函数,例如:

for(i in dataframe.name$org_name){
 if(nchar(i) > 25){
   dataframe.name[i].replace(
     to_replace=i,
     value= abbreviate(i)
   )
}

但我也遇到了错误。在这一点上,我甚至不知道该怎么做以及如何在我的数据框中缩写长名称?我真的迷失了,不知道该做什么以及如何缩短长名。如果有人能帮助我,那就太棒了!感谢。

******* *******编辑

现在我正在使用此代码:

for(i in 1:nrow(dfname)){
 if(nchar(dfname$orgname[i]) > 25){
   dfname$abbrv.column <- substring(dfname$orgname[i], 0, 25)
 }  
 else{
   dfname$abbrv.column <- dfname$orgname
 }
}

这并不是很有效,因为所有条目都是相同的组织名称

2 个答案:

答案 0 :(得分:3)

dataframe.name$abbr是数据框中所有缩写的向量,而不仅仅是一个名称。

这是dataframe.name$abbr中所有条目都设置为NA的原因;数据框中的姓氏不超过25个字符,因此dataframe.name$abbr中的所有条目都被指定为NA

@brettljausn has a decent suggestion:完全取消NA,只截断字符数超过25的位置。

这样的事情应该是一种享受:

dataframe.name$abbrv <- substring( dataframe.name$org_name, 0, 25 )

我会首先尝试使用abbreviate

dataframe.name$abbrv <- abbreviate( dataframe.name$org_name )

答案 1 :(得分:0)

Base R 缩写。限制为 8 个字符,包括“.”

> abbreviate(names(iris), minlength = 8)
Sepal.Length  Sepal.Width Petal.Length  Petal.Width      Species 
  "Spl.Lngt"   "Spl.Wdth"   "Ptl.Lngt"   "Ptl.Wdth"    "Species"