【问题标题】:how to manipulate variables in a factor of a data frame如何在数据框的一个因子中操作变量
【发布时间】:2015-09-27 05:29:10
【问题描述】:

我需要对我的数据框中的一个带有姓名电话号码的因素进行一些操作。 变量必须是长度为 5 的数字 也不包含特殊字符 我想将格式 AO-11111, VQ-11111from 更改为 111111 这意味着擦除第一个字符,最后将其余变量转换为 na

我的 data.frame 来自一个 .csv 文件。初始 phone_number 是一个因子数据,使得 电话号码 VQ-40773 VQ-43685 VQ-44986 40270 41694 42623 . .

【问题讨论】:

    标签: r


    【解决方案1】:

    strsplit 函数将帮助您从字符串中获取值。

     str="VQ-40773"
    (strsplit(str,"-"))[[1]][2] //will return 40773
    

    【讨论】:

      【解决方案2】:

      如果要删除破折号之前的任何内容,则:

       sub("^([^-]+[-])(.+)", "\\2", phone_number)
      
      > phone_number <- scan(what="")
      1:     VQ-40773
      2:     VQ-43685
      3:     VQ-44986
      4:     40270
      5:     41694
      6:     42623
      7: 
      Read 6 items
      > sub("^([^-]+[-])(.+)", "\\2", phone_number)
      [1] "40773" "43685" "44986" "40270" "41694" "42623"
      > as.numeric(sub("^([^-]+[-])(.+)", "\\2", phone_number))
      [1] 40773 43685 44986 40270 41694 42623
      

      nchar 函数将允许检查字符向量的长度。发布一个适当的例子,并请努力使标点符号和大小写正确。

      【讨论】:

      • 此代码不适用于 phone_number 中的 DER04 - 44432 或 DER4 等变量,因为该因子包含 1944 obs,结果我必须得到所有长度为 5 的变量,没有特殊字符和 AO- 11111, VQ-11111from to 111111 and NA for the rest
      • 发布一个足够复杂的测试数据集来说明要解决的问题。
      • 因子 w/ 1438 级别 "",".","25220",..: 871 1 1 847 1 960 458 458 594 1068 ... 41479 VQ-43980 DER8 NA 40928 VQ-44050 DER06-NNA DER06 38974 VQ-38974 VQ-38974 43398 DER11
      • 我认为您尚未发布任何我的代码无法按照您的规范处理的内容。 c("41479" , "VQ-43980", "DER8" , NA , "40928" , "VQ-44050" , "DER06-NNA", "DER06" , "38974", "VQ-38974", "VQ-38974", "43398", "DER11") 中的所有项目在破折号后都有 0 或 5 位数字内容。我确实告诉过你,你可以用nchar 测试到 5 位数字,但到目前为止还没有必要。 str)() 输出中较短的数字不是字符串,而是因子变量的索引整数。
      猜你喜欢
      • 2018-10-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-08
      • 2020-09-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多