首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R从列中提取多个变量

R从列中提取多个变量
EN

Stack Overflow用户
提问于 2020-05-24 00:18:52
回答 1查看 667关注 0票数 2

我是R的新手,所以如果不清楚的话,我很抱歉。

我的数据包含3个可变栏的1,000次观察:(a) person,(b) vignette,(c) response。这一栏载有一段所列的人口统计资料,包括年龄(20、80)、性别(男性、女性)、就业(就业、未就业、退休)等。每个人都收到了一份关于年龄(20或80)、性别(男性或女性)、就业(就业、未就业、退休)的数据,等等。

(e.x.第一人收到:一名20岁男子失业。第二人收到:一名80岁女性退休。第三人收到:一个20岁的男性失业.1,000人:一(N) 20岁的女性被雇用。

我尝试使用tidyr:提取(b)上的以提取其余的人口统计信息,并创建几个新的变量列,标记为“年龄”、“性别”、“就业”等。到目前为止,我只能使用以下代码提取“年龄”:

tidyr::extract(data, vignette, c("age"), "([20:80]+)")

我想提取所有的人口统计信息,并为(b)年龄、(c)性别、(d)就业等创建可变列。我的目标是有1000行观察行,其中有几个可变列,如下:

代码语言:javascript
复制
(a) person, (b) age, (c) sex, (d) employment (e) response 
Person #1       20      Male       unemployed     Very Likely
Person #2       80      Female     retired        Somewhat Likely
Person #3       20      Male       unemployed     Very Unlikely
...
Person #1,000  20      Female     employed       Neither Likely nor Unlikely

小编例子:

代码语言:javascript
复制
structure(list(Response_ID = "R_86Tm81WUuyFBZhH", Vignette = "A(n) 18 year-old Hispanic woman uses heroin several times a week. This person is receiving welfare, is employed and has no previous criminal conviction for drug possession. - Based on this description, how likely or unlikely is it that this person has a drug addiction?", Response = "Very Likely"), row.names = c(NA, -1L), class = c("tbl_df", "tbl", "data.frame"))

我很感谢你的指导和帮助!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-05-24 02:53:06

我编造了一些证据来调出你的信息。经验表明,在得到令人满意的结果之前,您将花费许多小时对正则表达式进行调整。你不会正确地从“她和她的男朋友都没有工作”这样的句子中提取就业状况。

代码语言:javascript
复制
raw <- structure(list(Response_ID = "R_86Tm81WUuyFBZhH", 
                      Vignette = "A(n) 18 year-old Hispanic woman uses heroin several times a week. This person is receiving welfare, is employed and has no previous criminal conviction for drug possession. - Based on this description, how likely or unlikely is it that this person has a drug addiction?", 
                      Response = "Very Likely"), row.names = c(NA, -1L), class = c("tbl_df", "tbl", "data.frame"))
raw2 <- raw %>% 
  add_row(Response_ID = "R_xesrew",
               Vignette = "A 22 year-old White boy drinks bleach.  He is unemployed",
               Response = "Unlikely")


rzlt <- raw2 %>% 
  tidyr::extract(Vignette, "Age", "(?ix) (\\d+) \\s* year\\-old", remove = FALSE) %>% 
  tidyr::extract(Vignette, "Race", "(?ix) (hispanic|white|asian|black|native \\s* american)", remove = FALSE) %>% 
  tidyr::extract(Vignette, "Job", "(?ix) (not \\s+ employed|unemployed|employed|jobless)", remove = FALSE) %>% 
  tidyr::extract(Vignette, "Sex", "(?ix) (female|male|woman|man|boy|girl)", remove = FALSE) %>% 
  select(- Vignette)

给出

代码语言:javascript
复制
# A tibble: 2 x 6
  Response_ID       Sex   Job        Race     Age   Response   
  <chr>             <chr> <chr>      <chr>    <chr> <chr>      
1 R_86Tm81WUuyFBZhH woman employed   Hispanic 18    Very Likely
2 R_xesrew          boy   unemployed White    22    Unlikely   

保存你的工作

代码语言:javascript
复制
library(readr)
write_csv(rzlt, "myResponses.csv")

另一个选择

代码语言:javascript
复制
library(openxlsx)
openxlsx::write.xlsx(rzlt, "myResponses.xlsx", asTable = TRUE)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61980169

复制
相关文章

相似问题

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