首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >相当于Python对R中字符串的综合列表操作

相当于Python对R中字符串的综合列表操作
EN

Stack Overflow用户
提问于 2019-01-24 20:07:49
回答 4查看 629关注 0票数 2

我希望对R中的字符列表执行操作,如下所述:

  1. 只保留“-”之后的内容
  2. 然后只保留其余字符的前四个字符(如果长度小于4个,则由'J‘完成)
  3. 把所有东西都放在上面的箱子里

Python中的示例

代码语言:javascript
复制
lt = ['LTA-Yokudo', 'LTA-Luo', 'LTA-Kawasaki']
[str(x).split('-')[1][:4].upper().ljust(4, 'J') for x in lt]

预期结果

代码语言:javascript
复制
['YOKU', 'LUOJ', 'KAWA'] # in Python
c('YOKU', 'LUOJ', 'KAWA') # in R

注意,列表中的字符串将始终包含字符'-‘。

在R中这样做的最佳解决方案是什么?

谢谢

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2019-01-24 20:19:23

使用stringr (以及来自magrittr的管道操作)的解决方案。

代码语言:javascript
复制
library(magrittr)
library(stringr)

lt <- c('LTA-Yokudo', 'LTA-Luo', 'LTA-Kawasaki')

lt2 <- lt %>%
  str_extract(pattern = "(?<=-)[A-Za-z]*") %>% # Extract letters after -
  str_sub(start = 1, end = 4) %>% # Get four letters
  str_pad(width = 4, pad = "J", side = "right") %>% # Add J at the end
  str_to_upper() # To lower case
lt2
# [1] "YOKU" "LUOJ" "KAWA"
票数 2
EN

Stack Overflow用户

发布于 2019-01-24 20:25:56

基本R方法:

代码语言:javascript
复制
> x <- c('LTA-Yokudo', 'LTA-Luo', 'LTA-Kawasaki')
> x1 <- toupper(substr(x,5,8))
> ifelse(nchar(x1) == 3,paste0(x1,"J"),x1)
[1] "YOKU" "LUOJ" "KAWA"
票数 5
EN

Stack Overflow用户

发布于 2019-01-24 20:40:16

考虑基数R中的以下非环解

代码语言:javascript
复制
lt = c('LTA-Yokudo', 'LTA-Luo', 'LTA-Kawasaki')

n <- toupper(substr(lt, regexpr('-', lt)+1, regexpr('-', lt)+4))
ifelse(nchar(n)==3, paste0(n, 'J'), n) 

# [1] "YOKU" "LUOJ" "KAWA"
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54354554

复制
相关文章

相似问题

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