首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R:将data.frame字符串变量解析为多个变量

R:将data.frame字符串变量解析为多个变量
EN

Stack Overflow用户
提问于 2015-06-24 14:32:49
回答 2查看 1.3K关注 0票数 1

我收集到的数据来自亚马逊的机械土耳其,它有一个名为"LifeTimeApprovalRate“的列向量。该列包含信息。

代码语言:javascript
复制
head(ES$LifetimeApprovalRate)
[1] [1] "100% (32/32)" "50% (16/32)" "100% (11/11)" "100% (4/4)"`

我想使用以下信息创建三个新变量:

代码语言:javascript
复制
 ES$rate: "100%" "50%" "100%" "100%" 
 ES$approve: "32" "16" "11" "4"
 ES$total: "32" "32" "11" "4"

恐怕我所尝试的任何事情都会创造出这些很难管理成有用的可怕的清单。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-06-24 14:41:00

tidyrseparate在这类事情上也很方便:

代码语言:javascript
复制
library(tidyr)
> dat <- data.frame(x = 1:4,y = c("100% (32/32)", "50% (16/32)", "100% (11/11)", "100% (4/4)"))
> separate(dat,y,c("rate","approve","total"),sep = "[()/ ]+",extra = "drop")
  x rate approve total
1 1 100%      32    32
2 2  50%      16    32
3 3 100%      11    11
4 4 100%       4     4
票数 4
EN

Stack Overflow用户

发布于 2015-06-24 14:36:37

你可以试试strsplit

代码语言:javascript
复制
  nm1 <- c('rate', 'approve', 'total')
  ES[nm1] <- do.call(rbind,
             strsplit(as.character(ES$LifetimeApprovalRate),'[()/ ]+'))

  ES[nm1[-1]] <- lapply(ES[nm1[-1]], as.numeric) 
  ES
  #    LifetimeApprovalRate rate approve total
  #1         100% (32/32) 100%      32    32
  #2          50% (16/32)  50%      16    32
  #3         100% (11/11) 100%      11    11
  #4           100% (4/4) 100%       4     4

下面有一个类似的选项,使用devel版本的data.table,即v1.9.5。安装开发版本的说明是here。在这里,我们使用tstrsplit来拆分列'LifetimeApprovalRate‘,并将输出列分配给新列('nm1')。还有转换列类的选项type.convert=TRUE

代码语言:javascript
复制
 library(data.table)#v1.9.5+
 setDT(ES)[, (nm1):=tstrsplit(LifetimeApprovalRate,'[()/ ]+', type.convert=TRUE)]
 #   LifetimeApprovalRate rate approve total
 #1:         100% (32/32) 100%      32    32
 #2:          50% (16/32)  50%      16    32
 #3:         100% (11/11) 100%      11    11
 #4:           100% (4/4) 100%       4     4

数据

代码语言:javascript
复制
 ES <-  structure(list(LifetimeApprovalRate = structure(c(2L, 4L, 1L, 
 3L), .Label = c("100% (11/11)", "100% (32/32)", "100% (4/4)", 
 "50% (16/32)"), class = "factor")), .Names = "LifetimeApprovalRate",
 row.names = c(NA, -4L), class = "data.frame")
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31029459

复制
相关文章

相似问题

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